我有一个后台线程,它不会开始处理,直到它的start
变量变为true
:
class MyBackgroundThread implements Runnable {
// ...
public void run() {
while(true) {
if(!start) continue;
doSomethingWith(myValue);
}
}
}
通过单击当然在事件调度线程上运行的start
a 上的按钮,该变量被设置为 true。后台线程类中JFrame
还有一个字段,通过点击按钮设置:myValue
startBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
backgroundThreadInstance.setMyValue(100);
backgroundThreadInstance.setStart(true);
// ...
}
});
如您所见,它myValue
在设置start
为之前分配了一些东西true
。这是否意味着设置myValue
和start
asvolatile
不是必需的?由于myValue
是先写的,所以会在之前泄露给后台线程start
,因此后台线程永远不会有机会处理未初始化的myValue
?