线程结束监听器.Java的

Den*_*nis 13 java multithreading actionlistener

是否有Java中的监听器来处理某些线程已经结束?像这样的东西:

Future<String> test = workerPool.submit(new TestCalalble());
test.addActionListener(new ActionListener()               
   {                                                         
    public void actionEnd(ActionEvent e)               
    {                                                        
        txt1.setText("Button1 clicked");                        
    }                                                        
   });
Run Code Online (Sandbox Code Playgroud)

我知道,这样处理是不可能的,但我想在一些线程结束时得到通知.

通常我用这个Timer类来检查每个Future的状态.但这不是很好的方式.谢谢

nan*_*nda 13

CompletionService您可以使用.

CompletionService<Result> ecs
       = new ExecutorCompletionService<Result>(e);
ecs.submit(new TestCallable());
if (ecs.take().get() != null) {
    // on finish
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用Guava的ListenableFuture.

代码示例:

ListenableFuture future = Futures.makeListenable(test);
future.addListener(new Runnable() {
 public void run() {
   System.out.println("Operation Complete.");
   try {
     System.out.println("Result: " + future.get());
   } catch (Exception e) {
     System.out.println("Error: " + e.message());
   }
 }
}, exec);
Run Code Online (Sandbox Code Playgroud)

就个人而言,我更喜欢番石榴解决方案.