【发布时间】:2015-07-31 01:24:18
【问题描述】:
我有一个 Runnable 线程,它循环通过一个无限循环。每次迭代它都会休眠到下一个任务时间,然后执行一些任务。这项任务非常关键,因此运行它的线程也非常关键。我并不是真正的 java 线程专家,所以我想知道 JVM 可能决定停止/终止该线程的各种场景或可能性是什么。在应用程序级别,对运行线程的数量没有限制。我很担心 JVM 的长期行为。
目前在我的本地测试系统中一切正常,但我几乎无法测试几个小时。这是一个在 Apache Tomcat 下运行的 Web 应用程序。
线程的创建和运行很简单,如下图:
Thread taskThread = new Thread(new TaskRunnable(taskObject));
taskThread.start();
循环:
public void run()
{
for (;;)
{
long sleepTime = this.taskObject.getNextTaskTime() - System.currentTimeMillis();
if (sleepTime > 0L) {
try
{
Thread.sleep(sleepTime);
}
catch (InterruptedException localInterruptedException)
{
localInterruptedException.printStackTrace();
}
}
this.taskObject.performTask(); // also computes next task time
}
}
或者,只要正在运行的线程本身没有异常,这将长期运行良好..
【问题讨论】:
-
JVM 不会随意自动停止线程。您可以通过使用
ExecutorService而不是自己管理线程来简化此操作。
标签: java tomcat jvm java-threads