synchronized与Lock的主要区别如下:
一、 synchronized是Java的内置关键字,而Lock是接口,其常用实现类为ReentrantLock(可重入锁)和ReentrantReadWriteLock(读写锁);
二、 synchronized是隐式的加锁,这个流程自动化,而Lock是显式的加锁,需要手动的lock()和unlock();
三、 synchronized常作用于代码块或方法上,而Lock只能作用于方法块;
四、 synchronized底层在方法上使用了 ACC_SYNCHRONIZED 来加锁,在代码块上使用了monitorenter(标注开始)和monitorexit(标注结束)指令来标注同步代码块,而Lock采用的AQS;
五、 synchronized是阻塞式加锁,Lock 是非阻塞式加锁支持可中断式加锁,支持超时时间的加锁;
六、 synchronized在进行加锁解锁时,只有一个同步队列和一个等待队列,Lock有一个同步队列,可以有多个等待队列;
七、 synchronized只支持非公平锁,Lock 支持非公平锁和公平锁;
八、 synchronized使用了 object 类的 wait 和 notify 进行等待和唤醒,Lock 使用了 condition 接口进行等待和唤醒(await和signal);
标签:加锁,Synchronized,synchronized,区别,队列,Lock,等待,标注 From: https://www.cnblogs.com/fxy0715/p/17438692.html