package test1;
public class ThreadA extends Thread {
private ThreadB b;
public ThreadA(ThreadB b) {
super();
this.b = b;
}
@Override
public void run() {
try {
synchronized (b) {
b.start();
System.out.println("first run !");
b.wait();
System.out.println("ThreadB destory after ThreadA auto notify");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
package test1;
public class ThreadB extends Thread {
@Override
public void run() {
try {
System.out.println("b run begin timer=" + System.currentTimeMillis());
Thread.sleep(6000);
System.out.println("b run end timer=" + System.currentTimeMillis());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
package test1;
public class Run {
public static void main(String[] args) {
ThreadB b = new ThreadB();
b.setName("B");
ThreadA a = new ThreadA(b);
a.setName("A");
a.start();
}
}
результат печати: первый запуск! b таймер начала выполнения = 1587441580267 b таймер завершения выполнения = 1587441586267 удаление ThreadB после автоматического уведомления ThreadA
почему ThreadB уничтожается после автоматического уведомления ThreadA ??
Я хочу знать ответ на уровне hotspotVM。
благодарю вас !
this.notifyAll()
. Это задокументировано _ 2_. Если вы действительно заинтересованы в просмотре исходного кода, вы можете просмотреть онлайн-репозиторий. Я не могу быть более конкретным, поскольку точно не знаю, где это реализовано. - person Slaw   schedule 21.04.2020