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都可以很好的解决

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容