如何在延迟的同一循环中调用不同的方法?
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()之外它正在工作,而且从同一个线程中杀死一个线程并不合乎逻辑。
答案 0 :(得分:2)
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();
}