Java 生产者与消费者之间的僵局

Java 生产者与消费者之间的僵局,java,consumer,producer,Java,Consumer,Producer,程序仅在此处卡住(不要终止) 有人请解释一下我在这里做错了什么?将值声明为volatile 即静态易失性布尔值=false 您已经声明了set/get方法synchronized。这意味着它们锁定在此(对象的固有锁定)。 但是在您的代码中,您为每个线程实例化了不同的线程资源,从而不使它们同步,因为这种对于每种情况都是不同的。 按如下方式更改代码: value of a :1 getA()1 与MyThreadB相同 然后在ThreadExecutionPoint public

程序仅在此处卡住(不要终止)


有人请解释一下我在这里做错了什么?

值声明为
volatile

静态易失性布尔值=false
您已经声明了
set/get
方法
synchronized
。这意味着它们锁定在此
(对象的固有锁定)。
但是在您的代码中,您为每个线程实例化了不同的
线程资源
,从而使它们
同步
,因为
这种
对于每种情况都是不同的。
按如下方式更改代码:

    value of a :1
    getA()1
与MyThreadB相同

然后在
ThreadExecutionPoint

public class MyThreadA implements Runnable {  
    ThreadResource tR;  

     public MyThreadA(ThreadResource tr) {  
        this.tR = tr;  
    }  
// your run method here NOT declaring a ThreadResource anymore!!!
}   

我可以说,这不是理解生产者/消费者问题的最佳方式。@AliAlamiri:好的。这个例子有什么问题。你能不能提出一些其他建议。这可能有助于理解你的观点。谢谢!!:)。我创建了两个对象,并为每个对象创建了两个线程。所以基本上,多线程的全部目的都失去了。wait()方法正在等待一个没有被任何其他线程共享的对象。@AkshuJain:您没有在同一个锁上进行
同步
。这是您的核心问题。
同步
是对
的锁定,在您的情况下,您使用了不同的
对象来锁定
public class MyThreadA implements Runnable {  
    ThreadResource tR;  

     public MyThreadA(ThreadResource tr) {  
        this.tR = tr;  
    }  
// your run method here NOT declaring a ThreadResource anymore!!!
}   
ThreadResource tr = new ThreadResource();  
Thread th1 = new Thread(new MyThreadA(tr));  
Thread th2 = new Thread(new MyThreadB(tr));