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会释放锁,你自己测试一下就知道了