1.lock锁
-
代码:
class A{ private final ReentrantLock lock = new ReentrantLock(); public void m(){ lock.lock();//加锁 try{ //保证线程安全的代码 } finally{ lock.unlock();//解锁 //如果同步代码有异常,要将unlock()写入finally语句块 } } }
2.synchronized 与 Lock的对比
-
Lock是显式锁(手动开启和关闭锁,别忘记关闭锁)synchronized是隐式锁,出了作用域自动释放
-
Lock只有代码块锁,synchronized有代码块锁和方法锁
-
使用Lock锁,JVM将花费较少的时间来调度线程,性能更好,并且具有更好的扩展性(提供更多的子类)
-
优先使用顺序:
- **Lock > 同步代码块(已经进入了方法体,分配了相应资源)> 同步方法(在方法体外)