【Java并发编程】14、Thread,线程说明

线程的状态:New、Runnable、Blocked、Waiting、Timed waiting、Terminated

1. RUNNABLE,对应"就绪"和"运行"两种状态,也就是说处于就绪和运行状态的线程在java.lang.Thread中都表现为"RUNNABLE"
2. BLOCKED,对应"阻塞"状态,此线程需要获得某个锁才能继续执行,而这个锁目前被其他线程持有,所以进入了被动的等待状态,直到抢到了那个锁,才会再次进入"就绪"状态
3. WAITING,对应"阻塞"状态,代表此线程正处于无限期的主动等待中,直到有人唤醒它,它才会再次进入就绪状态
4. TIMED_WAITING,对应"阻塞"状态,代表此线程正处于有限期的主动等待中,要么有人唤醒它,要么等待够了一定时间之后,才会再次进入就绪状态

 

 

Thread的各个方法对于线程状态的改变

 

new Thread(),变为New状态
start() ,变为Runnable状态,创建新的线程在栈空间中开辟新的空间.if (threadStatus != 0) 抛出异常
run() ,不创建新的线程,直接在当前线程执行 thread的run方法
field() ,使线程变成ready状态,从新和其他ready状态的线程参与cpu的竞争
isAlive(),如果线程已经启动且尚未终止,则为活动状态。介于Runnable和Terminated中间,都属于活动状态
join() ,B线程执行A.join(). B获取A的锁; 循环判断a.isAlive(),是则调用a.wait(0),进入Waiting状态
sleep() ,当前线程进入TIMED_WAITING状态,不释放监视器锁
interrupt(),不会中断一个正在运行的线程。如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,
它将接收到一个中断信号,提早地终结被阻塞状态,变成Runnable状态,抛出异常InterruptedException,继续往下执行
如果线程没有被阻塞,这时调用interrupt()将不起作用
isInterrupted(),isInterrupted(false),查看线程的中断位,不清除
interrupted() ,isInterrupted(true),静态方法,清除中断位,返回清除的中断位,只有当前线程才可以清除自己的中断位

Object的方法对于线程状态的改变

wait() ,使持有该对象的线程把该对象的控制权交出去,然后处于等待这个对象的控制权的状态。当前线程进入Waiting或者Timed waiting
notify() ,通知某个正在等待这个对象的控制权的线程可以继续运行。
notifyall(),通知所有等待这个对象控制权的线程继续运行。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值