在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。
也许有朋友会问,既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述。本文先从synchronized的缺陷讲起,然后再讲述java.util.concurrent.locks包下常用的有哪些类和接口,最后讨论以下一些关于锁的概念方面的东西
synchronized缺陷
前面我们说过synchronized的线程释放锁的情况有两种:
代码块或者同步方法执行完毕
代码块或者同步方法出现异常有jvm自动释放锁
从上面的synchronized释放锁可以看出,只有synchronized代码块执行完毕或者异常才会释放,如果代码块中的程序因为IO原因阻塞了,那么线程将永远不会释放锁,但是此时另外的线程还要执行其他的程序,极大的影响了程序的执行效率,现在我们需要一种机制能够让线程不会一直无限的等待下去,能够响应中断,这个通过lock就可以办到
另外如果有一个程序,包含多个读线程和一个写线程,我们可以知道synchronized只能一个一个线程的执行,但是我们需要多个读线程同时进行读,那么使用synchronized肯定是不行的,但是我们使用lock同样可以办到
Lock
查看API可知,Lock是一个接口,因此是不可以直接创建对象的,但是我们可以利用其实现的类来创建对象,这个先不着急,我们先看看Lock类到底实现了什么方法,具体的实现我们将会在介绍其实现的类的时候再详细的讲解
方法
延伸阅读
学习是年轻人改变自己的最好方式
- ssh框架 2016-09-30
- 阿里移动安全 [无线安全]玩转无线电——不安全的蓝牙锁 2017-07-26
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 论文笔记【图片目标分割】 2017-07-26
- 词向量-LRWE模型-更好地识别反义词同义词 2017-07-26
- 从栈不平衡问题 理解 calling convention 2017-07-26
- php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明 2017-07-26
- Swift实现JSON转Model - HandyJSON使用讲解 2017-07-26
- 阿里移动安全 Android端恶意锁屏勒索应用分析 2017-07-26
- 集合结合数据结构来看看(二) 2017-07-26