线程安全类正在终止

时间:2014-10-15 20:07:55

标签: 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
    String test = // lots of stuff here
  }
}

这是在以下

之类的测试类中执行的
public class Test {
  public static void main(String[] args) {
    ThreadedClass t1 = new t1();
    t1.start();
  }
}

问题是,我想从正在运行的线程中获得回调,所以当listener()获取消息时我可以通知Test(),检查消息并执行一些操作。为此,我编写了一个接口并将以下内容添加到listener()

this.callback.messageRecieved(message);

执行,但终止线程。思考?谢谢!

1 个答案:

答案 0 :(得分:-1)

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

  }
}

我理解你的代码,你正在编写socket编程。你在构造函数中调用listener方法 并且监听器具有块ThreadedClass初始化的输入流。

我在run方法中编写了监听器方法调用,因此当你启动时,将调用线程监听器方法。我还在ThreadedClass中传递了测试参考,因此您可以调用Test

中的任何方法

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