线程状态、线程打断
一、Java的6种线程状态
new:线程创建,还未启动
runnable:可运行状态,由线程调度器安排执行
ready:就绪状态
running:执行
waiting:等待被唤醒,如自旋
timed waiting:隔一段时间后自动唤醒
blocked:被阻塞,只有synchronized才会到该状态
terminated:线程结束

二、线程打断
1、interrupt:打断某个线程,只是设置线程的标志位,并不是真正的打断线程。是不能中断正在竞争锁的线程
isInterrupted:查询线程是否被打断
static interrupted:查询当前线程是否被打断过,并重新设置标志位
2、如果想打断锁争抢过程用ReentrantLock,使用lockInterruptibly方法
sleep方法在睡眠的时候,不到时间是没办法叫醒的,这个是时候线程用interrupt设置标志位,然后catch到interruptedException来进行处理,决定继续睡或者其他逻辑
捕获到异常后java会自动进行标记位的复位
三、线程的结束
面试题:如何优雅的结束一个线程?
1、stop方法,但是该方法已被弃用
因为使用stop方法会释放所有锁,加锁主要为了数据一致性问题,使用stop释放所有锁后,数据容易不一致
2、使用interrupt,捕获异常并且处理
作者:http://cnblogs.com/lyc-code/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权力。

浙公网安备 33010602011771号