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中编写。我只是在这里写的,所以可能会有小虫子。