线程查漏
-
线程中断:
-
使用场景:
-
stop将被弃用,因为调用thread.stop()->该线程所持有的所有锁的突然释放(不可控制),一致性无法保证的数据再被其他线程使用会出bug -
使用 interrupt()标志线程被中断,再根据isInterrupted()值在线程内写具体的逻辑判断,优雅的停止线程(保证数据安全)
-
线程6种状态:
NEW(未start),RUNNABLE,BLOCKED,WAITING(无限期等待),TIMED_WAITING(等待一段时间后自动释放),TERMINATED(已经运行终止)
- 以上由Thread类中State枚举类型列举,thread.getState()
-
在NEW或TERMINATED状态调用interrupt(),Java认为毫无意义,所以并不会设置线程的中断标识位
-
WAITING/TIMED_WAITING,遇到中断操作时,会抛出一个InterruptedException异常,并清空中断标志位(抛出后线程不结束;若是调用sleep后再中断使,线程会提前结束 TIMED-WATING 状态,继续执行)
理解为java认为wait或sleep和中断不应该同时使用?所以抛出异常提示处理?
-
-
sleep 与 与 wait 区别
-
Thread.sleep() Object.wait()
-
sleep():监控状态依然保持者??,且不会释放对象锁;
wait():线程会放弃对象锁
-