java线程通知

时间:2011-10-21 11:44:23

标签: java multithreading

我有2个类,fe Class1和Class2

让我说我在Class1中这样做:

Class2 class2 = new Class2();
Thread thread = new Thread(class2);
thread.start();
...
thread.stop();

现在我想在我的线程停止时检查Class2的run方法,我该怎么做? 因此,当class1停止线程时,我想向class2发出一些警告它停止然后做一些事情

4 个答案:

答案 0 :(得分:5)

  1. 请勿使用stop(),请使用interrupt()

  2. 如果你服从第1点,你可以使用Class2


  3. public void run() {
      if(Thread.currentThread().isInterrupted())
        //somebody interrupted me, ouch!
    }
    

答案 1 :(得分:2)

首先,不要使用thread.stop(),因为 已弃用 。因此,取决于这些方法是不可取的。 第二:有多种解决方法,即基本上试图关闭或沟通。

  1. 使用标记通知您的消息。但要确保整个调用是线程安全的。并及时保持检查标志已设置或未设置。如果设置,则执行所需操作。
  2. 中断是通知其他线程的完美方式。维护和中断策略说:当线程A抛出中断时,A的中断策略是关闭。即每当它收到一个中断。在A中运行,以便及时检查中断,如果设置了中断,则关闭服务。 检查状态 Thread.currentThread().isInterrupted() 通常,中断主要用于通知其他人请求它关闭。 (Brian Goetz“Concurrency in Practice”有一个很好的章节)。

答案 2 :(得分:0)

一旦线程“停止”,这意味着run方法Class2已退出。因此,没有办法让run方法中的代码执行after线程已停止。

您可以侦听中断并处理该中断,但此处理将在线程仍在运行时完成。

您可以在Class2中使用不同的方法,一旦线程停止,您就可以从Class1调用。

答案 3 :(得分:0)

你的class2应该得到一个InterruptedException,就是这样。 BTW http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Thread.html#stop()

出于兴趣,你想要达到的目标是什么?