假设我已经在
代码可能看起来像这样:
ThreadPool
中排队了一个工作项,但是如果没有数据要处理(从 BlockingQueue
读取),则工作项将被阻塞。如果队列为空,并且不会再有更多的工作进入队列,那么如果我想中断阻塞任务,就必须调用 Thread.Interrupt
方法,但如何在 ThreadPool
中执行相同的操作呢?代码可能看起来像这样:
void Run()
{
try
{
while(true)
{
blockingQueue.Dequeue();
doSomething();
}
}
finally
{
countDownLatch.Signal();
}
}
我知道在这种情况下最好的做法是使用常规的Thread
,但我想知道是否有一种与ThreadPool
等价的方法来中断工作项。
Monitor.Wait
会强制刷新;不过这是一个有趣的问题。 - Marc GravellWait
调用了ObjWait
,它是一个internalcall
,因此 JIT 并不完全掌控;但我可能会把这个问题公开提出。 - Marc Gravell