gpt4 book ai didi

Java多线程-主线程停止

转载 作者:行者123 更新时间:2023-11-30 05:52:08 25 4
gpt4 key购买 nike

我有一个 Java 应用程序,可以从 IoT 设备读取数据。因为我有智能温度计的例子:

public class Thermometer{

private final String ip;

public Thermometer(String ip) {
this.ip = ip;
}

public void startReading () {
Thread readThread = new Thread(() -> {
while (true) {
try {
//reading, writing data to DB
} catch (Exception e) {
//logging
}
}
});
readThread.start();
}
}

在我的主目录中,我添加了所有 IoT 设备并启动它们的阅读线程:

new Thermometer("192.168.1.100").startReading();
new Thermometer("192.168.1.101").startReading();

过了一会儿(我上次尝试大约 12 小时),我的主线程停止了,所以我的所有线程也停止了。我的日志文件(log4j2)有一行关于此内容:

com.foo.Main - null

可能完整的堆栈跟踪已打印到 sys.err。我会尽力捕获它并更新帖子。

为什么会发生这种情况?如何启动所有线程以便它们永远运行?

UPD。主类:

public class Main {

public static void main(String[] args) {
new Thermometer("192.168.1.100").startReading();
new Thermometer("192.168.1.101").startReading();
}
}

UPD2。启动脚本:

nohup java -Dlog4j.configurationFile=$PATH_TO_LOG4J2_XML -jar $PATH_TO_REEVE_JAR >> /home/buger/reeve/nohup.log 2>>&1 &
echo $! > $PATH_TO_PID
echo_and_log "Successfully started! PID = `cat $PATH_TO_PID`"

最佳答案

我认为您的读者线程出了问题。也许是一个异常(exception),achem,一个Error杀了他们。我建议你调试一下。

同时,这里有一个示例代码,可以证明我的理论:

public class Main {

public static void main(String[] args) {
Thread thread1 = new Thread(() -> {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("--> thread 1");
}
});
Thread thread2 = new Thread(() -> {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("--> thread 2");
}
});
thread1.start();
thread2.start();
System.out.println("--> main thread about to finish");
}

}

这会产生以下输出:

--> main thread about to finish
--> thread 2
--> thread 1
--> thread 1
--> thread 2
...

关于Java多线程-主线程停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53719641/

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