在JDK中,已经给我们开发人员提供了并发包。如:java.util.concurrent。为了更好在项目中使用并发包下的相关类,这里对常用的类进行总结和阐述。一来对于我来说可以更好的巩固以前的知识点,二来契合知识就要分享的初衷。
先看该包的结构图:
其实主要包括两类:同步控制工具和并发集合。
同步控制工具类
ReentrantLock 可重入锁
简单的说,可重入锁就是能够在单线程内重复获取锁,释放锁的时候需要依次释放。相对于Synchrinized比较,前者具有很好的灵活性和更细的控制粒度。ReentrantLock具备有如下的性质:
- 可重入: 单线程可以重复进入,但要重复退出。
- 提供有中断获取锁:lock.lockInterruptibly();
- 可限时: 超时不能获得锁,就返回false,不会永久等待构成死锁,如:lock.tryLock(12, TimeUnit.SECONDS)
- 公平锁: 先来先得, public ReentrantLock(boolean fair), 默认锁不公平的, 根据线程优先级竞争.
示例:
public class ReenterLock implements Runnable {
public static ReentrantLock lock = new ReentrantLock();
public static int i = 0;
@Override
public void run() {
for (int j = 0; j < 10000; j++) {
lock.lock();
// 超时设置
// lock.tryLock(5, TimeUnit.SECONDS);
try {
i++;
} finally {
// 需要放在finally里释放, 如果上面lock了两次, 这边也要unlock两次
lock.unlock();