synchronize是java的关键字,可以作用在方法上,代码块上,通过jvm来控制锁的获取与释放,它提供的是非公平锁,不能够手动释放锁,当代码执行完毕或者抛出异常由jvm放弃锁。
lock是juc下面的一个接口,提供了对锁的一些操作规范,需要手动获取锁和释放锁,通常在finally中释放。
lock响应中断。
lock的实现类为reentrentlock,意味着他和synchronize同样具有可重入性,而默认为非公平锁(构造器约定),可以设置为公平锁。还提供了其他API,如trylock,可以尝试去获取锁,同时提供了超时时间。另一个锁reentrentreadwritelock,则侧重于读写操作的性能优化,能够在读取的时候上读锁,多线程可同时访问,在进行写操作的时候则需要等待读锁释放,并允许同步操作。
推荐文章:https://www.cnblogs.com/handsomeye/p/5999362.html?from=singlemessage