【发布时间】:2021-01-06 16:17:52
【问题描述】:
Thread t2 = new Thread();
Thread t3 = new Thread();
t1.start();
t2.start();
synchronized (t2) {
t2.wait(20000);
}
t3.start();
上面的程序运行没有 t2 等待 20 秒。我观察到当线程对象启动时它不会等待。为什么会这样?
【问题讨论】:
-
如何确定
t2不等待?t2究竟做了什么? -
wait与告诉t2等待无关。请做一些research。 -
但我不明白这里到底发生了什么。带有wait方法的线程实例不会让当前正在执行的线程等待。
-
@KomalPatil
t2不做任何事情。它启动并立即终止,因为没有代码可以运行。所以t2.wait的调用线程几乎完全不等待。它唯一等待的是t2终止,这会通知服务员。 -
试图告诉其他线程以这种方式等待从一开始就是一个坏主意。从长远来看,将线程设计为作为对等体进行通信的独立单元是一种更有可能最终获得良好且可维护的解决方案的方法。尝试对线程进行微观管理与对软件开发人员进行微观管理一样有效。
标签: java multithreading threadpool wait