Java等待唤醒机制统计子线程运行时间的方式及其疑问
我想在主线程中获取子线程运行的时间,一种方式是使用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));
}
}
刚看多线程没多久,不太明白为什么会报错?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Object的文档里有这样几句话:
你这个问题的原因就是这两句话.
另外, 你可能需要考虑下如果子线程先执行
notify
方法, main才执行到wait
方法会怎样?使用countdownlatch或者