线程有4中状态: New, Runnable, Blocked, Dead

 

当调用Sleep时, 线程进入Blocked状态直到超时

当调用Wait(),将进入block状态直到超时或得到notify(), notifyAll(), signal(), signalAll()

当线程进行i/o操作时, 线程进入Blocked状态

当线程调用一个synchronized method时并且此method不可用时, 将进入block

注意:suspend()和resume(),stop()已经不再使用,易引起deadlock

 

如何中断一个线程:

     如果有thread实例, 可以调用其interrup() method,如果是用executor创建的, 可以先获取Future<>(当submit时),然后

调用其cancel方法,若要中断所有的executor下的线程,可以调用shutdownNow()。

注意 sleep是interruptable, 而io和synchronize方法是uninterruptable(interruptable means , 当线程被中断后, 可以 再run()

的方法中catch InterruptedException, 而非interruptable的run()中是无法catch住任何exception的。