java阻塞线程中断_线程阻塞,线程中断,何时以及如何响应中断

第21章 – 并发 – 线程阻塞,线程中断,何时以及如何响应中断

1.在线程阻塞时中断

线程的4中状态:

(1) 新建(new):线程被创建时,它只会短暂的处于这种状态.

此时线程已经分配了必须的系统资源,并执行了初始化.

此刻线程已经有资格获取CPU时间,之后调度器将把这个线程转变为可运行状态

或阻塞状态

(2) 就绪(Runnable):在这种状态下,只要调度器把时间片分配给线程,线程就可以运行.

也就是说,在任意时刻线程可以运行也可以不运行.只要调度器能分配时间片给线程,

它就可以运行,这不同于阻塞和死亡状态.

(3) 阻塞(Blocked): 线程能够运行,但有某个条件阻止它运行.当线程处于阻塞状态时,

调度器将忽略该线程,不会分配给线程任何CPU时间.直到线程重新进入了就绪状态,

它才有可能执行操作.

(4) 处于死亡或终止状态的线程将不再是可调度的,并且也不会得到CPU时间,它的任务

已结束,或不再是可运行的.任务死亡的通常方式是从run()方法返回,但任务的线程

还可以被中断.

任务进入阻塞状态的4个原因:

(1) 通过调用sleep(milliseconds)使任务进入休眠状态,此时,任务在指定的时间内不会运行

(2) 通过调用wait()是线程挂起,直到线程得到了notify()或notifyAll()消息(或signal(),

signalAll()消息),线程才会进入就绪状态

(3)任务在等待某个输入/输出完成

(4) 任务视图在某个对象上调用其同步控制方法,但是对象的锁不可用,因为另一个任务已经

获取了锁.

另,在当前现场上调用其他线程的join()方法时,也会引起当前线程阻塞(Java并发编程实践(童云兰等译)P115).

2. sleep()造成

你可能感兴趣的:(java阻塞线程中断)