当线程执行可中断调用(例如Thread.sleep )时,我想编写一个中断线程的测试。
我想同步两个线程:一个线程调用Thread.sleep,另一个线程等待,直到第一个线程开始休眠,并使用Thread.interrupt中断它。
如何确保第二个线程在第一个线程开始休眠后中断第一个线程?有可能吗?
发布于 2013-04-16 09:48:55
为什么要在调用Thread.sleep之后中断?中断是在调用睡眠()之前还是之后进行的,因此无论其调用时间如何,其效果都是相同的。你想测试一下吗?然后在循环中轮询,直到线程进入等待状态:
t1.start();
while (t1.getState()!= Thread.State.TIMED_WAITING) {
Thread.sleep(10);
}
t1.interrupt();发布于 2013-04-16 08:39:26
您不能确定,因为例如,操作系统可以决定在Thread.sleep语句之前挂起第一个线程。实际上,如果您也可以在第二个线程中使用一个小睡眠以及同步,那么它应该很好:
final CountdownLatch start = new CountdownLatch(1);
final Thread t1 = new Thread (new Runnable () {
public void run() {
start.await();
Thread.sleep(1000);
}
});
Thread t2 = new Thread (new Runnable () {
public void run() {
start.await();
Thread.sleep(100); //wait a little to make sure that t1 is asleep
t1.interrupt();
}
});
t1.start();
t2.start();
Thread.sleep(100); //wait to make sure both threads are started
start.countdown();发布于 2013-04-16 08:42:27
使用同步器并在休眠线程休眠前通知其锁上的断续线程。引入一个非常小的延迟(远远小于睡眠线程的睡眠时间),并在唤醒后对轨枕线程发出一个中断。
https://stackoverflow.com/questions/16032289
复制相似问题