Консультирование JavaDocs и исходного кода метода Thread.interrupt()
в Java SE 7
Я нашел это:
public void interrupt() {
if (this != Thread.currentThread())
checkAccess();
synchronized (blockerLock) {
Interruptible b = blocker;
if (b != null) {
interrupt0(); // Just to set the interrupt flag
b.interrupt(this);
return;
}
}
interrupt0(); //1, Outside of the synchronized block
}
//...
private native void interrupt0();
Как видно, вызов native метода в //1
находится вне синхронизированного блока. Итак, безопасно ли, если вы не вызываете метод interrupt()
в блок synchronized
?
Thread t;
//something else
t.interrupt(); //Not in a synchronized block
Будет ли это потокобезопасным? Что делать, если более 1 поток попытается прервать его одновременно? Как будет вести себя собственный метод interrupt0
?