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();
}
}
print result: first run ! b run begin timer=1587441580267 b run end timer=1587441586267 ThreadB destory after ThreadA auto notify
why ThreadB destroy after ThreadA auto notify??
i want know hotspotVM level answer。
thank you !