synchronized: 不需要用户手动去释放锁,当synchronized代码执行完后系统会自动让线程释放对锁的占用
Lock: ReentrantLock则需要用户去手动释放锁,若没有主动释放锁就有可能导致出现死锁。需要lock()和unlock()方法配合try/finally语句块来完成
sychronized : 不可中断,除非抛出異常或者正常运行完成
ReentrantLock: 用来实现分组唤醒需要唤醒的线程们可以精确唤醒,而不是像synchronized要么随机唤醒一个线程要么唤醒全部线程。
Lock可鉯实现精确唤醒(当然synchronized也可以,可是想实现起来太麻烦)
这里举一个小Demo: 多线程之间按顺序调用,实现A->B->C三个线程启动要求如下:
AA打茚5次,BB打印10次CC打印15次,紧接着 :AA打印5次BB打印10次,CC打印15次…来10轮。代码很套路看会一个方法就行。