Java Core「1」JUC- 线程基础
01-线程状态
NEW
RUNNABLE
BLOCKED
线程等待 monitor 锁时,会进入到阻塞状态。
WAITING / TIMED_WAITING
Object.wait() / Thread.join() / LockSupport.park() 导致线程进入 WAITING 状态,即等待其他的线程调用 Object.notify() / Object.notifyAll() / 线程执行完毕 / LockSupport.unpark()
带超时版本的上述方法会使线程进入 TIMED_WAITING 状态
此外,Thread.sleep() 也会使线程进入到 TIMED_WAITING 状态
TERMINATED
线程执行完毕后(正常或异常退出),该线程进入到 TERMINATED 状态
02-创建线程的方式
继承 Thread 类
实现 Runnable 接口
实现 Callable 接口
注:实现 Runnable 与 继承 Thread 类的区别是,前者更灵活、方便;Runnable 与 Callable 的区别是,前者的 run 方法无法返回值,而后者的 call 方法可以设定返回值。
03-线程的启动方式
Thread.start() 方法(结合 02 中线程创建方式)
ExecutorService 框架
可通过工具类 Executors 快捷地创建不同类型的线程池(阿里开发手册并不推荐这么做,原因是容易忽略线程池的内部逻辑,从而造成性能问题,推荐使用 ThreadPoolExecutor 方式)
cached thread pool
fixed thread pool
single thread pool
scheduled thread pool
work stealing pool
提交任务到线程池(Runnable 或 Callable 对象)
execute,无返回值
submit,有返回值,Future (更多信息参考[1])
CompletableFuture,更多信息参考[2]
版权声明: 本文为 InfoQ 作者【Samson】的原创文章。
原文链接:【http://xie.infoq.cn/article/684c919d3e777bb79160976e1】。文章转载请联系作者。
评论