java - 从syncExec返回变量的最佳方法是什么?

标签 java multithreading swt

在我的 SWT Java 应用程序中,我经常希望从 Display.syncExec() 调用内部返回信息。到目前为止我发现的最好方法是:

final ArrayList<Integer> result = new ArrayList<Integer>();
GUI.display().syncExec(new Runnable(){ public void run() {
   MessageBox mb = /* ... */;
    /* set up messagebox */
   result.add(mb.open());
}});
if (SWT.OK == result.get(0)) { /* ... */ }

我认为这是允许的,因为 ArrayList 是线程安全的,但是我应该使用更好的容器,还是更简单的方法?

最佳答案

ArrayList is not thread-safe 。您可以使用 Collections.synchronizedList 获取线程安全的 List 。但是,在您的情况下使用 AtomicInteger 或在更一般的情况下使用 AtomicReference 要简单得多。

final AtomicInteger resultAtomicInteger = new AtomicInteger();
Display.getCurrent().syncExec(new Runnable() { 
    public void run() {
        MessageBox mb = /* ... */;
            /* set up messagebox */
        resultAtomicInteger.set(mb.open());
}});
if (SWT.OK == resultAtomicInteger.get()) { /* ... */ }

关于java - 从syncExec返回变量的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76300/

相关文章:

java - 是否指定异常?

java - 快速 Java 匿名函数/类问题

JAVA SWTchart 更改 Y 轴符号而不更改图形的其余部分

java - Android简单的小部件

java - 如果字符串包含 000,OffsetDateTime 不会显示毫秒

python - 当一组任务依赖于另一组任务时,如何在 python 中同时完成两组任务?

java - 同步块(synchronized block)上的线程执行顺序

windows-7 - SWT Table.setLinesVisible(false) 似乎不适用于 Windows 7

java - 发现未知的扩展标签 : Eclipse Plugin Development

java - 如何在 Handlebars.java 中使用 json