我有一个类似于以下
的线程安全类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);
执行,但终止线程。思考?谢谢!
答案 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
中的任何方法此外,您的类始终是线程安全的。您没有使用静态方法或单例类。 如果为每个类初始化,则多线程问题没有任何问题。