异步任务的线程池?

时间:2014-04-28 10:14:51

标签: java multithreading asynchronous swt jface

我正在使用JFace编写一个简单的文件浏览器应用程序。应用程序的逻辑可以简化为:

  1. 在TableViewer中显示文件夹的内容。
  2. 每当双击文件夹项时,异步加载(以保持UI响应)其内容并显示它。
  3. 所以在我的意见中,至少涉及2个线程:a)UI线程和b)获取文件夹内容的后台线程。

    这里真正困扰我的是两个线程如何沟通,我必须“发明轮子”?更具体一点:

    1. 如何在双击某个项目时告诉后台线程?我想我需要在两个线程之间共享一个任务队列,或者JFace是否已经提供了一些异步任务机制?
    2. 如何告诉UI线程数据已到达并重新绘制表格?选择哪一个,asyncexec或syncexec?

1 个答案:

答案 0 :(得分:1)

我通常会做的是这样的事情:

// On double-click, start a new thread
new Thread(new Runnable()
{
    @Override
    public void run()
    {
        // Get your new data in this thread
        final MyFancyDataObject data = SomeOtherClass.goAndGetMyData(); 

        // Update the GUI, this is the safe way to do it from a non-gui-thread
        Display.getCurrent().asyncExec(new Runnable()
        {
            public void run()
            {
                GuiClass.updateContent(data);
            }
        });
    }
}).start();