lock又叫明锁,他是一个类。而synchronized是在jvm层面的
lock loc1=new reentrantlock();
lock默认是非公平锁
lock loc2 = new reentrantlocklock(true);
true是公平锁
互斥是依靠lock与unlock就可以实现,Condition实现通信。
一般情况下reentrantlock就可以满足,但是当场景变得复杂的时候,仅仅依靠reentrantlock不够,那么这个时候就需要condition来解决。condition实际是分离了执行与通讯
condition
condition需要依靠reentrantlock创建
condition cond1=reentrantlock.newcondition();
condition cond2=reentrantlock.newcondition();
conditon可以在场景变得复杂时,更加好的控制线程。
cond1.await 这个更加精准的解锁线程,如上所说,更加精准的通讯
cond2.signal
cond2.signal