weixin_42098639
追电骚年
采纳率0%
2018-10-09 15:09 阅读 4.5k

java线程类的join方法是否会释放锁,网上很多人说不释放锁,但是join底层使用wait,wait是释放锁的

java线程类的join方法是否会释放锁,网上很多人说不释放锁,但是join底层使用wait,wait是释放锁的

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • wd51207991 wd51207991 2019-08-10 12:46

    jion()方法会释放锁,不过一般情况下不会用到某线程加入join()使该线程释放锁(这句话仅对于我来说,初学到线程--)。要使其线程释放锁必须满足以下条件:如t1线程中加入t2.jion()方法,当且仅当t1线程中的同步锁为synchronized(t2),才会使t1线程释放锁;详细须学习wait()方法,因为调用wait()的对象是 锁对象,而jion()方法中调用的是wait()方法。

    点赞 4 评论 复制链接分享
  • lfyx123 lfyx123 2019-09-09 11:31

    会释放.但是释放的是this对象的锁(看源码)
    这种情况是无法释放的

    synchronized (tb){
                    System.out.println(Thread.currentThread().getName());
                    //sleep不会释放锁
    //                try {
    //                    TimeUnit.SECONDS.sleep(10);
    //                } catch (InterruptedException e) {
    //                    e.printStackTrace();
    //                }
                    //wait会释放锁
    //                try {
    //                    tb.wait(20000);
    //                } catch (InterruptedException e) {
    //                    e.printStackTrace();
    //                }
                    //join会释放锁
                    try {
                        Thread.currentThread().join(20000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName()+" end");
                }
    

    但是将这里的tb换成this就会释放了

    点赞 2 评论 复制链接分享
  • sinat_28678257 stone_scdn 2019-08-28 19:41

    我自己测试时是不释放,求解释

    点赞 1 评论 复制链接分享
  • msx985211 创业的鱼 2018-10-10 03:13

    join会释放锁,你自己测试一下就知道了

    点赞 评论 复制链接分享

相关推荐