2020-02-10 线程安全问题: 二. Lock锁

Look接口具有和synchronized关键字相似的同步功能、且比synchronized更加灵活、更具操作性,但需要在使用时手动获取锁和释放锁

以下为Lock接口最常用的ReentrantLock()(重入锁的用法)

Lock lock  = new ReentrantLock();
lock.lock();   //在可能出现问题的代码前拿到锁
try{
//可能会出现线程安全的操作
}finally{
//一定在finally中释放锁
//也不能把获取锁在try中进行,因为有可能在获取锁的时候抛出异常
  lock.ublock();
}

synchronized的缺点
(1)不可控性,无法做到随心的加锁和释放锁。
(2)效率比较低下,比如我们现在并发的读两个文件,读与读之间是互不影响的,但如果给这个读的对象使用synchronized来实现同步的话,那么只要有一个线程进入了,那么其他的线程都要等待。
(3)无法知道线程是否获取到了锁。

而上面synchronized的这些问题,Lock都可以很好的解决

你可能感兴趣的:(2020-02-10 线程安全问题: 二. Lock锁)