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()造成

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值