线程结束。Java

Java 中是否有任何侦听器来处理一些线程已经结束?

Java 中是否有任何来处理一些线程已经结束?

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

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

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

13

您可以使用CompletionService

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

另一种选择是使用来自 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);

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

3

这是一个geekish。使用起来非常不可见,但是有趣而聪明

Thread t = ...
t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler(){
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        t.getThreadGroup().uncaughtException(t, e);//this is the default behaviour
    }       
    protected void finalize() throws Throwable{
        //cool, we go notified
      //handle the notification, but be worried, it's the finalizer thread w/ max priority
    }
});

通过 PhantomRefernce 可以更好地达到效果

希望你有一点微笑:)

旁注:您要问的是不是线程结束,而是任务完成事件,最好是覆盖decorateTaskafterExecute

3

无需添加大量额外的代码,您可以自己制作一个快速线程,如下所示:

//worker thread for doings
Thread worker = new Thread(new Runnable(){ 
    public void run(){/*work thread stuff here*/}
});
worker.start();
//observer thread for notifications
new Thread(new Runnable(){
    public void run(){
    try{worker.join();}
    catch(Exception e){;}
    finally{ /*worker is dead, do notifications.*/}
}).start();
3

您可以实现观察者模式来报告完成情况。

public intece IRunComplete {
    public void reportCompletion(String message);
}

让 Thread 调用方实现此接口。

在 run () 方法中,你最后调用这个方法。所以现在你确切地知道这个线程什么时候结束。

试试看。我实际上正在使用这个,它工作正常。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(89)
SurveyMonkey API-Mashery帐户如何与SurveyMonkey帐户相关联
上一篇
语音到文本翻译器覆盆子 pi
下一篇

相关推荐

  • java游戏下载器:下载最新的Java游戏,体验不一样的乐趣!

    Java游戏下载器是一种用于从网络上下载Java游戏的客户端程序。它可以帮助用户快速、安全地下载Java游戏,并将它们保存到本地磁盘上。…

    2023-01-13 07:05:24
    0 61 15
  • java质数判断:如何使用Java判断质数

    质数(prime number)又称素数,指在大于1的自然数中,除了1和它本身以外不再有其他因数。Java代码如下:…

    2023-01-27 13:26:28
    0 36 13
  • java游戏盒子:玩转Java游戏盒子,体验不一样的乐趣!

    Java游戏盒子是一种特殊的Java应用程序,它可以把多个Java小游戏集中在一起,方便玩家管理和运行这些游戏。代码如下:…

    2023-01-28 09:18:41
    0 28 94
  • java递归详解一种解决问题的有效方法

    Java递归是一种编程技术,它允许一个函数调用自身。它使用一个或多个参数,以便在每次调用时将其状态更改,以便最终到达基本情况,从而终止递归。…

    2023-01-26 11:53:11
    0 49 43
  • java监控:如何使用Java监控提升应用性能

    Java监控是一种方法,用于监视Java应用程序的性能和可用性。它可以帮助开发人员了解Java应用程序的运行情况,并在发生问题时及时采取行动。Java监控可以通过多种方式来实现,例如使用Java虚拟机(JVM)内置的监控工具,使用第三方监控工具,或者使用自定义代码来实现。…

    2023-01-07 14:45:39
    0 38 93
  • java开发游戏培训从入门到精通

    示例示例Java开发游戏培训是一种使用Java语言开发游戏的培训课程,旨在帮助学习者掌握如何使用Java语言开发游戏。该培训课程将介绍Java语言的基本概念,包括变量、数据类型、流程控制、函数、类、对象、继承、接口、异常处理等。学习者还将学习如何使用Java语言开发游戏,包括游戏设计、游戏开发、游戏测试和游戏发布等。…

    2023-01-02 03:08:06
    0 21 50
  • java在线中文视频从入门到精通

    Java在线中文视频是指使用Java语言开发的在线视频,它可以在互联网上播放和浏览,而无需下载。它可以使用HTML5、Flash Player或其他技术来实现。…

    2023-01-20 12:32:35
    0 30 14
  • java数据库是什么:如何使用Java来构建强大的数据库系统

    Java数据库是一种使用Java编写的数据库,它可以在Java虚拟机上运行,并且可以使用Java API来访问和操作数据库。它允许开发人员使用Java语言来创建和管理数据库,而无需学习SQL。…

    2023-01-20 02:42:24
    0 66 10

发表评论

登录 后才能评论

评论列表(1条)