我想在主线程中获取子线程运行的时间,一种方式是使用join()方法,经验证是可行的;
但是我想试试等待唤醒机制,思路是:子线程启动后主线程等待,子线程结束后唤醒主线程,但是不太清楚为什么会报错,从运行结果看出并没有提前唤醒,但是却报错了。
public class Test {
public static void main(String[] args) {
Object lock = new Object();
int num = 1000;
//子线程
Thread t = new Thread(() -> {
String s = "";
for (int i = 0; i < num; i++) {
s += "Java";
}
System.out.println("t Over");
lock.notify();
});
//计时
long start = System.currentTimeMillis();
System.out.println("start = " + start);
//启动子线程
t.start();
//主线程等待
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
long end = System.currentTimeMillis();
System.out.println("end = " + end);
System.out.println("end - start" + (end - start));
}
}
刚看多线程没多久,不太明白为什么会报错?
Object的文档里有这样几句话:
你这个问题的原因就是这两句话.
另外, 你可能需要考虑下如果子线程先执行
notify
方法, main才执行到wait
方法会怎样?