1.Thread
的常见构造方法
中断一个线程的方法
使用
thread
对象的
interrupted()
方法通知线程结束
.
以下是代码:
运行结果:
thread 收到通知的方式有两种:
1.
如果线程因为调用
wait/join/sleep
等方法而阻塞挂起,则以
InterruptedException
异常的形式通
知,
清除中断标志
当出现
InterruptedException
的时候
,
要不要结束线程取决于
catch
中代码的写法
.
可以选择
忽略这个异常
,
也可以跳出循环结束线程
2.
否则,只是内部的一个中断标志被设置,
thread
可以通过
Thread.interrupted()
判断当前线程的中断标志被设置,
清除中断标志
Thread.currentThread().isInterrupted()
判断指定线程的中断标志被设置,
不清除中断标志
这种方式通知收到的更及时,即使线程正在 sleep 也可以马上收到。
观察标志位是否清除
标志位是否清除
,
就类似于一个开关
.
Thread.isInterrupted()
相当于按下开关
,
开关自动弹起来了
.
这个称为
"
清除标志位
"
Thread.currentThread().isInterrupted()
相当于按下开关之后
,
开关弹不起来
,
这个称为
"
不清除标志位
".
使用
Thread.isInterrupted()
,
线程中断会清除标志位
运行结果:
使用
Thread.currentThread().isInterrupted()
,
线程中断标记位不会清除
.
运行结果:
2 等待一个线程-join()
有时,我们需要等待一个线程完成它的工作后,才能进行自己的下一步工作。例如,张三只有等李四转账成功,才决定是否存钱,这时我们需要一个方法明确等待线程的结束。
运行结果: