返回

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.");
    }
}
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(1)
按点赞数排序
用户头像