我有一个如下所示的线程安全类
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/