我有一个可运行的线程,它循环通过一个无限循环。每次迭代它都会休眠到下一个任务时间,然后执行一些任务。这项任务非常关键,因此运行它的线程也非常关键。我并不是真正的 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
}
}
或者,只要正在运行的线程本身没有异常,这将长期有效。