我已經設置了一個Java
Thread
類,它執行一個特定的任務,創建一個新的Process
並與其他各種東西一起運行。Java線程:使用run()中的interrupt()是否可以在完成其任務時停止線程?
在其調用Thread
父類的我已經建立了循環
while(!thread.isActive()) {
...
}
我想知道這是否是最好的做法/接受更新run()
在Thread
類發出interrupt()
run() {
callTask();
interrupt();
}
更新
然後我可以在Thread
創建boolean
finished
場,並更改爲true一旦callTask()完成,並有家長找
主題:
run() {
callTask();
finished = true;
}
家長:
// Start the threads for each Device
for (DeviceRunner deviceRunner : deviceRunners) {
deviceRunner.start();
}
boolean doneProcessingDevices = false;
while (!doneProcessingDevices) {
Set<DeviceRunner> deviceRunnersToRemove = new HashSet<DeviceRunner>();
for (DeviceRunner deviceRunner : deviceRunners) {
if (deviceRunner.isFinishedRunning()) { // check to see if the thread is finished
deviceRunnersToRemove.add(deviceRunner);
}
}
// remove the device runners which are no longer active
deviceRunners.removeAll(deviceRunnersToRemove);
if (deviceRunners.isEmpty()) {
doneProcessingDevices = true;
}
Thread.sleep(1000);
}
謝謝
你想讓線程「中斷」它對應的'Thread'對象,基本上會中斷它自己嗎? –
你想讓一個線程自行中斷嗎?那是什麼意思? 't.interrupt()'的目的是獲得線程't'來關注一些已經改變的重要事情(通常是「關閉」請求)。你的線程不需要引起注意。它已經有了自己的關注。 –
@SotiriosDelimanolis我只是設置了中斷,以便父線程知道線程何時完成。我注意到,即使線程在run()中不再有任何任務要執行,thread.isActive在某些情況下也會不斷返回true。 我應該只是在線程中放入一個布爾值,然後更改它,並且在線程完成時讓父級外觀爲它設置? – ALM