采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
thread.join(); // 等价于 下面的代码 synchronized (thread) { thread.wait(); }
是主线程是waiting 不是子线程。子线程还在运行
谢谢悟空老师,这点明白了。还有另外个问题,我看到了synchronized (thread),如果把thread变成共享成员变量,两个线程都拿到了thread并同时thread.join(),其中一个线程会变成Blocking状态吗
代码发一下吧,怎么能让两个线程都拿到thread然后join?没看到代码不太理解。
没有结合过业务逻辑,感觉可以写就写出来了 public class JoinMayCauseThreadBlocked { public static Thread thread; public static void execute() throws InterruptedException { if (thread == null) { // 伪单例,线程不安全,不是主要逻辑 thread = new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()); } }); } thread.join(); // 必须保证 join() 完成再实现其他业务 Thread.sleep(1000); } public static void main(String[] args) throws InterruptedException { for (int i = 0; i < 10; i++) { execute(); } } }
登录后可查看更多问答,登录/注册
完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题
1.9k 26
913 12
1.1k 12
2.5k 12
1.1k 11