Java 中你怎样唤醒一个阻塞的线程?

Posted 咔啡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 中你怎样唤醒一个阻塞的线程?相关的知识,希望对你有一定的参考价值。

在 Java 发展史上曾经使用 suspend()、resume()方法对于线程进行阻塞唤醒,但

随之出现很多问题,比较典型的还是死锁问题。

解决方案可以使用以对象为目标的阻塞,即利用 Object 类的 wait()和 notify()方

法实现线程阻塞。

首先,wait、notify 方法是针对对象的,调用任意对象的 wait()方法都将导致线程

阻塞,阻塞的同时也将释放该对象的锁,相应地,调用任意对象的 notify()方法则

将随机解除该对象阻塞的线程,但它需要重新获取改对象的锁,直到获取成功才

能往下执行;其次,wait、notify 方法必须在 synchronized 块或方法中被调用,

并且要保证同步块或方法的锁对象与调用 wait、notify 方法的对象是同一个,如

此一来在调用 wait 之前当前线程就已经成功获取某对象的锁,执行 wait 阻塞后当

前线程就将之前获取的对象锁释放。

以上是关于Java 中你怎样唤醒一个阻塞的线程?的主要内容,如果未能解决你的问题,请参考以下文章

在java多线程程序中,怎样实时找出处于等待(阻塞)状态线程、进程的个数。

怎样检测线程的状态(c代码 )如:线程是死亡、阻塞、挂起等。

什么是Java方法线程唤醒与阻塞

Java线程唤醒与阻塞常用方法有哪些?

Java线程唤醒与阻塞常用方法有哪些?

Java线程唤醒与阻塞常用方法有哪些?