如何从另一个正在运行的线程中获取值?

时间:2014-09-14 18:59:21

标签: java multithreading swingworker

我在GUI类中执行itasser.run()。但由于它本身就是一个完整的过程,publish(itasser.getTimeToFinish())仅在itasser.run()之后执行。

那么我可以在run()完成时使用itasser.getTimeToFinish()或其他值吗?

我有许多其他对象,比如itasser,我将以相同的方式执行并更新GUI。

final ITasser itasser = new ITasser();
itasser.setInput(getString1(), getString1(), getString1());

SwingWorker<ProcessStatus, Integer> worker = 
    new SwingWorker<ProcessStatus, Integer>() 
{
    @Override
    protected ProcessStatus doInBackground() throws Exception {
        itasser.run(); //complete task

        publish(itasser.getTimeToFinish()); //??? problem
        //executes only after itasser.run() completes

        return itasser.getStatus();
    }

    @Override
    protected void process(List<Integer> chunks) {
        // display remaining time on GUI
    }

    @Override
    protected void done() {
        if(get() == ProcessStatus.FINISHED)
            itasser.getOutput(); //do something with output
    }
};

worker.execute();

1 个答案:

答案 0 :(得分:0)

我会使用BackgroundWorker http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx来完成不同线程中的任务,然后使用委托来访问值。