1.1两阶段终止模式:
Thread t1 = new Thread(() -> {
while(true) {
try {
if (Thread.currentThread().isInterrupted()) {
log.debug("处理后事");
break;
}
Thread.sleep(1000);
log.debug("监控中");
} catch (InterruptedException e) {
e.printStackTrace();
Thread.currentThread().interrupt();
//出现异常后interrupt重置为false,需要修改为true
}
}
});
t1.start();
Thread.sleep(4000);
t1.interrupt();
log.debug("t1 end");
1.2关于park和中断标志位:
Thread thread = new Thread(() -> {
log.debug("park");
LockSupport.park();
log.debug("unpark");
log.debug("{}", Thread.currentThread().isInterrupted());
// log.debug("{}", Thread.Interrupted());
LockSupport.park();
log.debug("unpark");
});
thread.start();
Thread.sleep(1000);
thread.interrupt();
}
关于isInterrupted()和Interrupted()方法
前者会拿到标志位,后者会改变并拿到标志位。
而park()方法在线程中使用会处于一个阻塞的状态,但是对于标志位为真的时候,park会失效。
1.3守护线程
thread.setDaemon(true);//设置为守护线程
当主线程执行结束时,守护线程会被强制结束。
(例如java垃圾回收线程)
2. 1 线程的5种运行状态(操作系统层面)
初始状态、可运行状态、运行状态、终止状态、阻塞状态。
线程的6种状态(java api层面)
NEW、RUNNABLE(运行状态、可运行状态、阻塞状态)、TERMINATED(终止状态)、BLOCKED、WAITING、 TIMED_WAITING。