在我的程序中,我有以下模板的功能:
public MyObject myMethod() {
final MyObject[] myObject = new MyObject[]{null};
MyListener myListener= new MyListener() {
public void messageReceived(MyObject newData) {
// Thread #1
myObject[0] = newData;
}
}
...
// Thread #2
while (myObject[0] == null) ;
return myObject[0];
}
不幸的是,Java 64位中的同步原因存在问题线程#2没有看到线程#1做出任何更改,而while循环永远不会结束。我应该如何同步这些线程?
谢谢!
答案 0 :(得分:1)
你正在做一个忙碌的循环。这几乎不是一个好主意。改为使用阻塞数据结构,如BlockingQueue。收到消息后,将其放入队列中。并让你的接收器从队列中获取消息。当队列中没有消息时,接收器将被阻塞。
答案 1 :(得分:1)
尝试使用java.util.concurrent.ArrayBlockingQueue而不是Array ...然后你不必使用synchronized关键字。它的线程安全。
答案 2 :(得分:1)
您可以在两个线程中对Synchronized
对象使用myObject
块(因为它永远不为空)。
synchronized(myObject) {
...do stuff ...
}
建议:使用wait-notify
机制,而不是使用while循环。