Pat*_*iel 7 java multithreading
在使用超时值调用join并且超时通过后,Java线程处于什么状态.例如,您有以下代码:
Thread thread = new Thread();
thread.start();
thread.join(TIMEOUT);
Run Code Online (Sandbox Code Playgroud)
并且超时传递并且线程没有返回状态是什么?我需要注意什么才能确保我不泄漏线程.我最初的假设是在加入调用之后执行以下操作:
if (thread.isAlive())
{
thread.interrupt();
thread = null;
}
Run Code Online (Sandbox Code Playgroud)
检查线程是否仍在运行,如果是,则中断它,然后将其清零以确保它被垃圾收集.
Javadoc声明join(time)函数最多会等待很多毫秒才能使线程死掉.实际上,如果超时通过,您的代码将停止阻止并继续.如果你担心在这种情况下'泄漏线程',你可能应该重新设计,这样你就不必加入线程并且可以观察正在运行的线程的状态.此外,在线程上调用中断是坏事.
class MyThread extends Thread {
private boolean keepRunning = true;
private String currentStatus = "Not Running";
public void run() {
currentStatus = "Executing"
while(keepRunning)
{
try {
someTask()
currentStatus = "Done";
} catch (Exception e) {
currentStatus = "task failed";
keepRunning = false;
}
}
}
public stopThread() {
keepRunning = false;
}
}
Run Code Online (Sandbox Code Playgroud)
以上可能是一个更好的例子来处理线程.您不需要显式地将线程设置为null,但是例如,如果您在ArrayList中存储线程,则将其从列表中删除并让Java处理它.
| 归档时间: |
|
| 查看次数: |
20034 次 |
| 最近记录: |