线程
引言
最近想起多线程和高并发的知识,好久没看,感觉有点陌生了,想着还是好好梳理一下。就从线程开始吧。
线程的基础知识
什么是线程
资源调度的基本单位,可理解为一个程序中不同的执行路径
为什么用多线程
充分压榨cpu资源
java中启动线程的五种方式
- 继承Thread类。
- 实现Runable接口,创建线程启动。
- 使用Callable和FutureTask,创建线程启动。
- 直接new Thread,使用lambda表达式。
- 使用用线程池启动。
线程的状态
java线程一共有六种状态
-
new:刚创建了线程。
-
runnable:调用start(),线程处于可启动状态,等待线程调度器调用
包括ready和running状态
-
waiting:线程处于等待状态,等待被唤醒
-
waiting:线程处于等待状态,一段时间自动唤醒
-
block:被阻塞,等待锁
-
terminated:线程执行完毕,结束生命周期。
线程的打断
Thead.java中 interrupt 相关的三个方法
- interrupt() :实例方法,设置线程中断标志。
- isInterrupted():实例方法,是否被打扰过。
- interrupted():静态方法,恢复标志位。
interrupt对正在竞争锁的线程打断
synchronized不可打断
如果想打断正在竞争锁的线程,使用ReentrantLock的lockInterruptibly()。
使用场景
使用interrupt() and isInterrupted,可以优雅的结束线程