我是Java并发/多线程的新手。有人可以在什么情况下必须(或一定不能)使用acquire()和acquireUninterruptible()来告诉我,它们有何不同;以及如何使用它们(代码示例?)。
非常感谢你。
最佳答案
acquire()
是可中断的。这意味着,如果线程A在信号量上调用acquire()
,并且线程B通过调用interrupt()
中断线程A,则InterruptedException
将被抛出到线程A上。
另一方面,acquireUninterruptibly()
不可中断。这意味着,如果线程A在信号量上调用acquireUninterruptibly()
,并且线程B通过调用interrupt()
中断线程A,则不会在线程A上抛出InterruptedException
,只是在acquireUninterruptibly()
返回后,线程A的中断状态将被设置。