gpt4 book ai didi

java - 线程安全类正在终止

转载 作者:行者123 更新时间:2023-12-01 06:15:23 25 4
gpt4 key购买 nike

我有一个如下所示的线程安全类

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com