首页 > Java > UI更新线程方法syncExec中获取返回值的最佳方法是什么?
2018
12-03

UI更新线程方法syncExec中获取返回值的最佳方法是什么?

我正在编写Eclipse插件,并且经常出现这样的情况:正在运行的Job需要暂停一段时间,在UI线程上异步运行某些东西,然后继续。 所以我的代码通常看起来像:

Display display = Display.getDefault();
display.syncExec(new Runnable() {
    public void run() {
                // Do some calculation
                // How do I return a value from here?
    }
});
// I want to be able to use the calculation result here!

一种方法是让整个Job类都有一些字段。另一种方法是使用自定义类(而不是匿名类,并使用其生成的数据字段等。 什么是最好,最优雅的方法?     

正确的解决方案是使用AtomicReference:

final AtomicReference<Object> result = new AtomicReference<Object>();
Display display = Display.getDefault();
display.syncExec(new Runnable()
{
  public void run()
  {
    result.set("foo");
  }
}
System.out.println(result.get());

所有线程都保证可以看到对AtomicReference值的更改,就像它被声明为volatile一样。


本文》有 0 条评论

留下一个回复