我正在尝试确定以下 java 方法是否是线程安全的:
public Object calledByMultipleThreads() {
final Object[] item = new Object[1];
if (!EventQueue.isDispatchThread()) {
try {
EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
helperMethod(item)
}
});
} catch (InterruptedException | InvocationTargetException ex) {
// logging...
}
} else {
helperMethod(item)
}
return item[0];
}
private void helperMethod(Object[] item) {
item[0] = new Object();
}
我知道这final Object[] item = new Object[1]
是一种解决方法(因为final Object item
无法在 内部修改之类的东西Runnable
)。并且由于invokeAndWait
使用,item[0]
在它被引用之前设置return
,但我担心调用者线程(不是EDT)可能看不到对item
数组的更新,并返回null
。这可能吗?有什么方法可以测试它的安全性吗?