ProcessOn 画图:
线程一共有 6 种状态(NEW、RUNNABLE、BLOCKED、WAITING、 TIME_WAITING、TERMINATED)
线程中断/停止:
interrupt 方法: 线程中断(中断标识位设置 )
C源码 : thread.cpp
void Thread::interrupt(Thread* thread) {
trace("interrupt", thread);
debug_only(check_for_dangling_thread_pointer(thread);)
os::interrupt(thread);
}
os_linux.cpp:
void os::interrupt(Thread* thread) {
xxxx.....
osthread->set_interrupted(true);
xxxx.....
if (thread->is_Java_thread()) ((JavaThread*)thread)->parker()->unpark();
ParkEvent * ev = thread->_ParkEvent ; if (ev != NULL) ev->unpark() ;
}
isInterrupted: 与 interrupt 搭配使用,判断当前线程是否中断 (延伸: 也可用volatile + boolean 在多个线程之间,实现类似效果)
Thread.interrupted: 中断复位, 调用interrupt后,再次调用Thread.interrupted 方法,将中断标识进行复位
线程安全问题:可见性、原子性、有序性