请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

主线程调用thread.join() 后thread是waiting状态,那么主线程是什么状态,为什么?

        thread.join();
        // 等价于 下面的代码
        synchronized (thread) {
            thread.wait();
        }

正在回答

1回答

是主线程是waiting   不是子线程。子线程还在运行

0 回复 有任何疑惑可以回复我~
  • 提问者 ych_1997 #1
    谢谢悟空老师,这点明白了。还有另外个问题,我看到了synchronized (thread),如果把thread变成共享成员变量,两个线程都拿到了thread并同时thread.join(),其中一个线程会变成Blocking状态吗
    回复 有任何疑惑可以回复我~ 2019-11-18 19:02:27
  • 悟空 回复 提问者 ych_1997 #2
    代码发一下吧,怎么能让两个线程都拿到thread然后join?没看到代码不太理解。
    回复 有任何疑惑可以回复我~ 2019-11-18 20:30:01
  • 提问者 ych_1997 回复 悟空 #3
    没有结合过业务逻辑,感觉可以写就写出来了
    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();
            }
        }
    }
    回复 有任何疑惑可以回复我~ 2019-11-21 21:37:30
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信