java - 线程安全类正在终止

标签 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()、检查消息并执行某些操作。为此,我编写了一个接口(interface)并将以下内容添加到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

  }
}

据我了解您的代码,您正在编写套接字编程。您在构造函数中调用监听器方法 并且监听器具有带有 block ThreadedClass 初始化的输入流。

我在 run 方法中编写了监听器方法调用,以便在启动线程时监听器方法将被调用。另外,我在 ThreadedClass 中传递了 Test 引用,以便您可以调用 Test 中的任何方法

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

关于java - 线程安全类正在终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26391181/

相关文章:

java - 从运行方法/线程返回数据以更新 GUI

C++ - _beginthreadex() 不启动线程

java - 正则表达式捕获重复内的组

java - SWT 使用线程填充 GUI 小部件的正确方法?

java - 带注释的 Spring HandlerInterceptor 映射

java - 需要通过Main.class运行suite.xml

java - 图的可视化

java - 实时 java - 如何应用多次运行

java - 有没有办法在不使用 instanceof 的情况下强制方法使用子类构造函数?

java - 从 java SimpleDateFormat 获取模式字符串