java线程中timed和blocked两种状态的区别

今天出去参加一个卖货公司的interview,抱着学习的态度去看了一下,interviewer还是不错的,
问的问题都在点上,让平时对java语言很自信的我,发现自己有些方面,其实理解有严重误区。希望
这篇帖子能给到大家帮助。

java线程的几种状态:new,runnable,running,blocked,waiting,timed_waiting,dead
好了,问题来了,blocked和waited有什么区别:
我之前总有个误解,完全和正确答案没有关系,这边就不出来了,防止误导大家。
下面我贴出正确答案:

/**
* Thread state for a thread blocked waiting for a monitor lock.
* A thread in the blocked state is waiting for a monitor lock
* to enter a synchronized block/method or
* reenter a synchronized block/method after calling
* {@link Object#wait() Object.wait}.
*/
BLOCKED,

/**
* Thread state for a waiting thread.
* A thread is in the waiting state due to calling one of the
* following methods:
* {@link Object#wait() Object.wait} with no timeout
* {@link #join() Thread.join} with no timeout
* {@link LockSupport#park() LockSupport.park}
*
*
* A thread in the waiting state is waiting for another thread to
* perform a particular action.
*
* For example, a thread that has called Object.wait()
* on an object is waiting for another thread to call
* Object.notify() or Object.notifyAll() on
* that object. A thread that has called Thread.join()
* is waiting for a specified thread to terminate.
*/
WAITING,

上面是jdk源码对这两种状态的描述,很明显了,BLOCKED状态主要是线程为了获取
monitor锁进去同步块或者同步同步方法中,被阻塞住,产生的一种阻塞状态。
而waiting状态是指,一个线程在等待另外一个线程的某种动作而产生的等待状态。

再通俗一点说,blocked的是线程推进到某个关卡,门被关上了,这时候只能被迫等待关卡打开。而waiting是指线程在某个地方停下来,需要得到其他线程的信号才能出发。

blocked是被动等待,timed的是主动等待。

BLOCKED状态: synchronized关键字
WAITING状态: wait,join,park
TIMED_WAITING状态: sleep,wait,join,parkNanos,parkUntil

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值