Java中的多线程逻辑
发布时间:2022-06-12 01:32:02 302
相关标签: # php
我正在尝试解决大学练习。该类AImpl有一个ma(B b)创建和运行两个线程的方法。这些线程必须调用mb1()and mb2()(它们是只打印文本的简单方法,所以我没有包括它们)。然后调用线程应该等待mb1()在完成之前终止。
我的逻辑是:
第一个线程进入并在当前对象上执行完b.mb1()starts to后,释放互斥锁。wait()然后第二个线程运行并且它做同样的事情。当它们都在等待时,调用线程调用notifyAll()对象,唤醒它们。他们执行b.mb2()然后终止。
问题是当第一个线程开始等待时object.wait(),控制流不会在调用线程上返回,并且程序进入死锁。
我的逻辑哪里有问题?
public class AImpl{
public static Object object = new Object();
public static void main(String[] args) throws InterruptedException {
BImpl b = new BImpl();
AImpl.ma(b);
}
public static void ma(B b) throws InterruptedException {
Thread thread = new Thread() {
@Override
public void run() {
b.mb1();
synchronized(object){
try {
object.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
b.mb2();
System.out.println("Thread finished");
}
};
Thread thread1 = new Thread() {
@Override
public void run() {
b.mb1();
synchronized(object){
try {
object.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
b.mb2();
System.out.println("Thread finished");
}
};
thread.run();
thread1.run();
synchronized(object){
object.notifyAll();
}
System.out.println("Program finished.");
}
}
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报