簡體   English   中英

延遲從同一循環調用不同的方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM