Кажется, я нашел ответ в java.lang. Исходный код темы (Oracle / Sun JVM):
/* The object in which this thread is blocked in an interruptible I/O
* operation, if any. The blocker's interrupt method should be invoked
* after setting this thread's interrupt status.
*/
private volatile Interruptible blocker;
private Object blockerLock = new Object();
/* Set the blocker field; invoked via sun.misc.SharedSecrets from java.nio code
*/
void blockedOn(Interruptible b) {
synchronized (blockerLock) {
blocker = b;
}
}
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();
return;
}
}
interrupt0();
}
Так поправьте меня, если я ошибаюсь, мои выводы:
- Прерывание - это просто обратный вызов для события прерывания потока
- Присоединить конкретный прерываемый экземпляр к конкретному классу возможно только с помощью следующего кода: sun.misc.SharedSecrets.getJavaLangAccess (). Заблокирован (threadInstance, intrInstance);