Java线程状态的解析

线程的状态有:NEW,RUNNBLE,WATING,TIMED_WAITING, BLOCKED,TERMINATED

我们可以通过Thread实例中的getState()方法来查看该线程当前处于什么状态。

当我创建了一个新的线程,还没有开启线程的时候,这时候该线程的状态就是NEW状态。

当我们启动线程的时候,这时候线程的状态就会发生改变,从NEW改变为RUNNBLE状态

我们可以通过isAlive()这个方法来判断线程是否存活 ,当我们的线程完成任务的时候就会进入TERMINATED状态表示这个任务执行完成。

上述过程没有涉及到阻塞状态,因为我们的线程在执行任务的过程中没有遇到线程等待,线程休眠,锁资源的竞争。当我们在这个线程中加入sleep方法时线程会从RUNNABLE进入TIMED_WAITING

 

我们从字面上理解就是等待时间,如果等待时间超过了我们设定的时间约束的时候,就会被唤醒,然后再次进入RUNNABLE状态。

如果我们想要看到BLOCKED状态需要有锁竞争的存在,一把锁只能有一个线程使用,当我们有两个线程竞争一把锁的时候,一个线程会获得锁,另一个线程会处于BLOCKED状态,阻塞等待,等待锁资源的释放。

这里我们通过jConsole来观察线程状态

此时锁的拥有者是t1,然后我们的t2就会阻塞等待进入BLOCKED状态,等待t1释放锁。

当我们把t1线程中的sleep方法换成wait()方法时,wait方法可以让线程等待,直到被其他线程使用notify进行唤醒。此时t1就会进入WATING状态。

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值