首页 > 图灵资讯 > java面试题>正文

java多线程面试题-阻塞唤醒过程

2024-05-17 13:31:08

 

阻塞:

这三个方法的调用都会使当前线程阻塞。该线程将会被放置到对该Object的请求等待队列中,然后让出当前对Object所拥有的所有的同步请求。线程会一直暂停所有线程调度,直到下面其中一种情况发生:

① 其他线程调用了该Object的notify方法,而该线程刚好是那个被唤醒的线程;

② 其他线程调用了该Object的notifyAll方法;

唤醒:

线程将会从等待队列中移除,重新成为可调度线程。它会与其他线程以常规的方式竞争对象同步请求。一旦它重新获得对象的同步请求,所有之前的请求状态都会恢复,也就是线程调用wait的地方的状态。线程将会在之前调用wait的地方继续运行下去。

为什么要出现在同步代码块中:

由于wait()属于Object方法,调用之后会强制释放当前对象锁,所以在wait() 调用时必须拿到当前对象的监视器monitor对象。因此,wait()方法在同步方法/代码块中调用。

 

上一篇 java多线程面试题-线程状态切换
下一篇 java多线程面试题-wait和sleep区别

文章素材均来源于网络,如有侵权,请联系管理员删除。