Java 正在终止线程安全类

Java 正在终止线程安全类,java,multithreading,Java,Multithreading,我有一个线程安全类,如下所示 public class ThreadedClass extends Thread { public ThreadedClass() { // Some code listener(); } public void run() { // Some code } public void listener() { // Code that's checking for messages from a server

我有一个线程安全类,如下所示

public class ThreadedClass extends Thread {
  public ThreadedClass() {
    // Some code
    listener();
  }

  public void run() {
    // Some code
  }

  public void listener() {
    // Code that's checking for messages from a server
    String test = // lots of stuff here
  }
}
public class Test {
  public static void main(String[] args) {
    ThreadedClass t1 = new t1();
    t1.start();
  }
}
这是在测试类中执行的,如下所示

public class ThreadedClass extends Thread {
  public ThreadedClass() {
    // Some code
    listener();
  }

  public void run() {
    // Some code
  }

  public void listener() {
    // Code that's checking for messages from a server
    String test = // lots of stuff here
  }
}
public class Test {
  public static void main(String[] args) {
    ThreadedClass t1 = new t1();
    t1.start();
  }
}
问题是,我希望有一个来自正在运行的线程的回调,所以当侦听器收到消息时,我可以通知测试,检查消息,并执行一些操作。为此,我编写了一个接口,并向listener添加了以下内容

this.callback.messageRecieved(message);
这会执行,但会终止线程。思想?谢谢

public class Test {

  public void notify(){//notify};  

  public static void main(String[] args) {
    //Main Thread here 1
    ThreadedClass t1 = ThreadedClass.getInstance();
    //Main Thread 3 
    //Main Thread starts a Thread : Thread-1
    t1.start();
    //*****Main Thread 4 (Parallel Execution here. Thread-1 is listening when Main Thread is here) 

  }
}

public class ThreadedClass extends Thread {

  private ThreadedClass instance = null;      

  private ThreadedClass() {

  }

  public static synchronized ThreadedClass getInstance(){
     //Main Thread 2 
     if(instance == null){
        return instance = new ThreadedClass();
     } 
     return this.instance;
  }    

  public void run() {
       //Thread-1  1
        listener();
       //Thread-1  2
  }

  public void listener() {
    // Code that's checking for messages from a server
    String text = // lots of stuff here

  }
}
据我所知,您正在编写套接字编程。您在构造函数中调用侦听器方法 并且侦听器具有带有ThreadedClass初始化块的输入流

我在run方法中编写了listener方法调用,因此当您启动线程侦听器方法时,它将被调用。我还通过了ThreadedClass中的测试引用,所以您可以调用测试中的任何方法

此外,您的类始终是线程安全的。您没有使用静态方法或单例类。
如果为每个类初始化,则不会出现任何多线程问题。

尝试在t1.start之后使用t1.join;你能出示完整的代码吗?不清楚如何添加侦听器。请稍候,如果您正在检查侦听器方法中的消息,该方法是从ThreadedClass的构造函数调用的,调用线程中仍在运行。@MortezaAdi如果主线程在新线程终止后无法执行任何操作,则主线程没有理由挂起并等待新线程终止。新线程不是守护进程线程,因此,JVM和新线程即使在main返回后仍将继续运行。请将解决方案的说明与代码一起添加。@user3087839我正在处理一个MQTT项目,希望将该类作为线程执行一次,并在继续执行其他代码时让它侦听。我没有在eclipse中编写。我只是在这里写的,所以可能会有小虫子。