在没有对象的情况下中止``Object.wait``

时间:2017-11-03 10:46:22

标签: java multithreading synchronization wait deadlock

让我们说我有一个最终通过

保护访问的结构
while(must_wait){

    ...

    if(must_wait){
        try {
            synchronized(target){
                target.wait();
            }
        }catch(InterruptedException e){
            Thread.currentThread().interrupt();
        }
    }
}

但是,让我们假设我有一个死锁检查器告诉我我需要中止当前获取锁定的尝试。

while(must_wait && not_aborted){

    ...

    if(must_wait){
        try {
            synchronized(target){
                target.wait();
            }
        }catch(InterruptedException e){
            Thread.currentThread().interrupt();
        }
    }

    not_aborted = ...
}

如果死锁检查程序无法访问target,我是否可以唤醒当前线程,或者我是否需要经常检查,即

while(must_wait && not_aborted){

    ...

    if(must_wait){
        try {
            synchronized(target){
                target.wait(TIMEOUT);
            }
        }catch(InterruptedException e){
            Thread.currentThread().interrupt();
        }
    }

    not_aborted = ...
}

(是的,我确实知道LockSupport.park/unpark,但问题在于我需要将当前线程的引用交给目标,我确实想避免这种情况。 )

0 个答案:

没有答案