我正在尝试使用多线程解决 Java 中编写者偏好的读者-编写者问题。以下是我的代码的精简版本。它会起作用吗?
public PriorityQueue<myClass> pq;
public void foo(){
myClass obj = new myClass();
pq.add(obj);
obj.wait();
//Actual code
}
public void bar(){
pq.remove().notify();
}
假设优先级队列 pq 最初为空,并且封闭类的构造函数调用 pq 的构造函数。另外,首先调用 foo,然后调用 bar。因此,当调用 foo 时,它将 obj 添加到队列中,并成为前面的元素,这样当在 bar 中调用remove 时,该元素就是被删除的元素。我的问题是,“实际代码”会被执行吗?或者我是在两个完全不同的对象上执行 wait() 和 notification() 吗?如果是这样,我该如何修复它?
你应该注意的是优先队列 http://download-llnw.oracle.com/javase/6/docs/api/java/util/PriorityQueue.html不是线程安全的...即,如果同时调用 foo 和/或 bar,它们可能会不可挽回地破坏 pq 的内部状态。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)