线程中的中断
interrupt方法
当对一个线程调用interrupt
方法时,线程被中断。
islnterrupted方法
调用静态的Thread.currentThread
方法获得当前线程,然后调用islnterrupted
方法判断当前线程是否中断.
调用这个方法不会改变中断状态
但是,如果线程被阻塞就无法检测中断状态.这是产生Interrupted Exception
异常的地方.
当在一个被阻塞的线程(调用sleep
或wait
)上调用interrupt
方法时,
阻塞调用将会被Interrupted Exception
异常中断 。
Interrupted方法
Interrupted
方法是一个静态方法,它检测当前的线程是否被中断.
而且,调用interrupted
方法会清除该线程的中断状态
volatile
假设对共享变量除了赋值之外并不完成其他操作 , 那么可以将这些共享变量声明为volatile
.
线程的生命周期六个状态
- New(新创建)
- Runnable(可运行)
- Blocked(被阻塞)
- Waiting(等待)
- Timed Waiting(计时等待)
- Terminated(被终止)
Runnable(可运行)
记住,在任何给定时刻,二个可运行的线程可能正在运行也可能没有运行(这就是为什么将这个状态称为可运行而不是运行)
Waiting(等待)
当线程等待另一个线程通知调度器一个条件时
, 它自己进入等待状态 。 在调用 Object . wait 方法或 Thread . join 方法
, 或者是等待 java ,
util . concurrent 库中的 Lock 或 Condition 时 , 就会出现这种情况
。
Terminated(被终止)
线程因如下两个原因之一而被终止 :
- 因为
run
方法正常退出而自然死亡 。 - 因为一个没有捕获的异常终止了
run
方法而意外死亡 。
线程的3种创建方式
1.继承Thread类创建线程
2.实现Runnable接口创建线程
new Thread(()->{
System.out.println("hello");
}).start();
3.使用Callable和Future创建线程