从延迟调用同一循环中的不同方法

时间:2013-03-30 15:32:33

标签: java android multithreading

如何在延迟的同一循环中调用不同的方法?

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()之外它正在工作,而且从同一个线程中杀死一个线程并不合乎逻辑。

1 个答案:

答案 0 :(得分:2)

Thread.interrupt()是一种完全可以接受的方法。

Thread#interrupt()

  

中断此主题。除非当前线程正在中断   本身的checkAccess方法总是允许的   调用线程,这可能导致抛出SecurityException。

     

如果在调用wait()时阻塞了这个线程,请等待(long),   或者等待(long,int)Object类或join()的方法,   join(long),join(long,int),sleep(long)或sleep(long,int)方法   这个类,然后它的中断状态将被清除   收到InterruptedException。

     

如果此线程在可中断的I / O操作中被阻止   然后通道将关闭,线程的中断状态   将被设置,线程将收到ClosedByInterruptException。

     

如果此线程在Selector中被阻塞,那么线程的中断   状态将被设置,它将立即从选择中返回   操作,可能具有非零值,就像选择器一样   唤醒唤醒方法。

     

如果以前的条件都没有,则该线程的中断   状态将被设置。

     

中断非活动的线程无需任何效果。

Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated?

尝试这样的事情:

while (!Thread.currentThread().isInterrupted()) {
    //Call methods .
    Thread.currentThread().interrupt();
}