[英]Calling different methods from the same loop with delay
如何在同一循環中延遲地調用不同的方法?
time 0: call A
+100ms: call B
+100ms: call C
+100ms: call D
...
+100ms: call X
stopLoop()
我試過了:
Thread thread = new Thread() {
@Override
public void run() {
try {
while (true) {
call A();
sleep(100);
call B();
sleep(100);
call C();
sleep(100);
call D();
sleep(100);
call E();
sleep(100);
thread.stop(); ???
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
除了stop()之外,它都在工作,而且從同一個線程中殺死線程看起來並不合邏輯。
Thread.interrupt()是一種完全可以接受的方法。
中斷此線程。 除非始終允許當前線程中斷自身,否則將一直調用此線程的checkAccess方法,這可能導致引發SecurityException。
如果在調用Object類的wait(),wait(long)或wait(long,int)方法或join(),join(long),join(long,int)方法時阻塞了此線程,sleep(long)或sleep(long,int)此類的方法,則其中斷狀態將被清除,並將收到InterruptedException。
如果此線程在可中斷通道的I / O操作中被阻止,則該通道將被關閉,線程的中斷狀態將被設置,並且該線程將收到ClosedByInterruptException。
如果此線程在選擇器中被阻塞,則該線程的中斷狀態將被設置,並且它將立即從選擇操作中返回,可能具有非零值,就像調用選擇器的喚醒方法一樣。
如果上述條件均不成立,則將設置該線程的中斷狀態。
中斷未激活的線程不會產生任何效果。
為什么不推薦使用Thread.stop,Thread.suspend,Thread.resume和Runtime.runFinalizersOnExit?
嘗試這樣的事情:
while (!Thread.currentThread().isInterrupted()) {
//Call methods .
Thread.currentThread().interrupt();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.