notify,wait,3个以上线程的时候出现的一个问题
首先线程
再来
2个线程的时候 还好说一个线程肯定会调用notify,另外一个线程的肯定会被唤醒。
但是如果3个以上的线程时,就有可能线程A 调用wait后,线程B调用notify,然后wait释放锁后,线程A继续运行完,然后会notify线程B继续运行完,在这过程,线程C可能一直都不会运行,但是线程A,B都运行完了,线程Cwait后 就没有线程来唤醒它了,导致死锁。这问题怎么解决?
public class TestThread11 {
private static Object lock = new Object();
public void execute(){ // synchronized修饰
synchronized(lock){
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+":"+i);
if(i == 5){
try {
lock.wait();
System.out.println(Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
lock.notify();
}
}
}
}再来
class ThreadAA implements Runnable {
public void run() {
TestThread11 test = new TestThread11();
test.execute();
}
public static void main(String[] args)
{
Runnable runabble=new ThreadAA();
Thread a=new Thread(runabble,"A");
a.start();
Thread b=new Thread(runabble,"B");
b.start();
Thread c=new Thread(runabble,"C");
c.start();
}
} 2个线程的时候 还好说一个线程肯定会调用notify,另外一个线程的肯定会被唤醒。
但是如果3个以上的线程时,就有可能线程A 调用wait后,线程B调用notify,然后wait释放锁后,线程A继续运行完,然后会notify线程B继续运行完,在这过程,线程C可能一直都不会运行,但是线程A,B都运行完了,线程Cwait后 就没有线程来唤醒它了,导致死锁。这问题怎么解决?
...全文
相关推荐
wait,notify等线程知识.pdf
**死锁和活锁问题**: 使用wait/notify机制时,需要注意死锁和活锁问题。死锁发生在两个或更多线程互相等待对方释放资源的情况下。活锁则是线程不断尝试获取资源但一直失败,导致无限期阻塞。
一家三口共用同一账户银行卡,wait();notify();
notify()只会唤醒一个等待的线程,而notifyAll()会唤醒所有等待的线程。3.
两个线程交替执行
然而,在多线程编程中,线程之间的同步是一个非常重要的问题。本文将通过一个简单的例子来演示多线程编程和线程同步的应用。
详解Java程序并发的Wait-Notify机制
总的来说,Java的Wait-Notify机制提供了一种有效的控制多线程同步和协作的方式,但它需要谨慎使用,以避免死锁、活锁和饥饿等问题。
线程、多线程和线程池面试专题.docx
使用stop()方法:但该方法可能会发生预料不到的问题。3.


Java SE
