线程相关QA

2018-03-29  本文已影响18人  Cocoonshu粽子

Q:用户线程和守护线程有什么区别

java中的线程分为两种:守护线程(Daemon)和用户线程(User)。
通过方法Thread.setDaemon(bool on);true则把该线程设置为守护线程,反之则为用户线程
唯一的区别是判断虚拟机(JVM)何时离开,Daemon是为其他线程提供服务,如果全部的User Thread已经撤离,Daemon 没有可服务的线程,JVM撤离。也可以理解为守护线程是JVM自动创建的线程(但不一定),用户线程是程序创建的线程;比如JVM的垃圾回收线程是一个守护线程,当所有线程已经撤离,不再产生垃圾,守护线程自然就没事可干了,当垃圾回收线程是Java虚拟机上仅剩的线程时,Java虚拟机会自动离开。

Q:多线程实现方式?(最基本的)

extends Thread
implements Runnable
implements Callable<V>
ExecutorService
详见代码https://github.com/Pluto4ever/neptune/tree/master/neptune-web/src/main/java/com/neptune/test/thread

Q:Java线程的几种状态,以及转换方式

新建(new):新建一个线程的对象。
可运行(runable):线程对象创建后,其他线程调用该线程的start方法。或者该线程位于可运行线程池中等待被线程调用,已获取cpu的使用权。
运行(running):可运行的线程获取了cpu的使用权,执行程序代码。
阻塞(block):由于某些原因该线程放弃了cpu的使用权。停止执行。除非线程进入可运行的状态,才会有机会获取cpu的使用权。
  1. 等待阻塞:运行中的线程执行wait方法,这时候该线程会被放入等待队列。
  2. 同步阻塞:运行中的线程获取同步锁,如果该同步锁被别的线程占用,这个线程会成被放入锁池,等待其他线程释放同步锁。
  3. 其他阻塞:运行的线程执行sleep或者join方法这个线程会成为阻塞状态。当sleep超时,join等待线程终止,该线程会进入可运行状态。
死亡(dead):线程run mian 执行完毕后,或者因为某些异常产生退出了 run 方法,该线程的生命周期结束。


image.png

Q:sleep()和wait()的区别

Q:怎样理解synchronized关键字

synchronized代表加锁,分为synchronized 方法和 synchronized 块。

synchronized(syncObject)
{  
//允许访问控制的代码  
} 

Q::一个线程,进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法

如果其他方法不是synchronized方法,可以进入,如果是synchronized方法将不能进入

Q:synchronized锁重入是什么鬼

多道门用的是同一把锁,你已经有钥匙了,过每道门不需要每次拿钥匙去开,只要钥匙没还回去,还在你手里,那就直接过。这就叫锁的可重入。

Q:synchoronized修饰代码块

对synchronized (this)的一些理解

Q:volatile关键字

Q:ThreadLocal用法

Q:乐观锁、悲观锁

Q:Java中CAS

Q:自旋锁

Q:Java -- 偏向锁、轻量级锁、自旋锁、重量级锁

Q:java.util.concurrent介绍

Q:对象锁、方法锁、类锁

Q:可重入锁、可中断锁、公平锁、读写锁

上一篇 下一篇

猜你喜欢

热点阅读