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

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

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

会释放.但是释放的是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就会释放了

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

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