- 线程死亡的三种方式
正常结束
run() 或者 call() 方法执行完成后,线程正常结束;
异常结束
线程抛出一个未捕获的 Exception 或 Error,导致线程异常结束;
调用 stop()
直接调用线程的 stop() 方法来结束该线程,但是一般不推荐使用该种方式,因为该方法通常容易导致死锁;
- 为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法?
JVM执行start方***另起一条线程执行thread的run方法,这才起到多线程的效果~
如果直接调用Thread的run()方法,其方法还是运行在主线程中,没有起到多线程效果。
- 守护线程是什么?
守护线程是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。在 Java 中垃圾回收线程就是特殊的守护线程。
- 了解Fork/Join框架吗?
Fork/Join框架是Java7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。
Fork/Join框架需要理解两个点,「分而治之」和「工作窃取算法」。
「分而治之」
以上Fork/Join框架的定义,就是分而治之思想的体现啦
「工作窃取算法」
把大任务拆分成小任务,放到不同队列执行,交由不同的线程分别执行时。有的线程优先把自己负责的任务执行完了,其他线程还在慢慢悠悠处理自己的任务,这时候为了充分提高效率,就需要工作**算法啦~
工作算法就是,「某个线程从其他队列中窃取任务进行执行的过程」。一般就是指做得快的线程(*线程)抢慢的线程的任务来做,同时为了减少锁竞争,通常使用双端队列,即快线程和慢线程各在一端。



