关于Java中锁的几点思考

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/barlay/article/details/83546434

当对共享资源进行访问的时候必须使用锁对资源进行独占式声明,保证同一时间只有一个线程对共享资源进行访问。而一个线程可以多次访问加锁的共享资源,因为一个线程对共享资源的访问都是顺序的,不可能发生并发访问共享资源导致的问题。所以,所有的锁对于一个线程来说都是可重入的,只要当前线程获取到了锁。为此,Java中专门定义了一个类ReentrantLock来实现对资源的加锁和释放锁的操作。它比Java中的Synchronized关键字提供了更加灵活的对锁的操作,也比Synchronized关键字提供了更加明确的锁的概念。
关于Synchronized关键字的可重入性和可重入锁的介绍见博文:
Java多线程:synchronized的可重入性
Java不可重入锁和可重入锁理解
并发(一):理解可重入锁
java多线程系列(四)—ReentrantLock的使用
自旋锁、阻塞锁、可重入锁、悲观锁、乐观锁、读写锁、偏向所、轻量级锁、重量级锁、锁膨胀、对象锁和类锁
synchronized和锁(ReentrantLock) 区别
java的两种同步方式, Synchronized与ReentrantLock的区别
Java面试题:详细说明一下可重入锁ReentrantLock的原理
关于synchronized和ReentrantLock之多线程同步详解
Java AQS学习-ReentrantLock源代码分析
PS. 在实际的开发当中,我们更倾向于明确的声明锁:

Lock lock = new ReentrantLock(); // 普通锁 或
ReadWriteLock rwLock = new ReentrantReadWriteLock(); // 读写锁

JDK中关于锁的声明位于java.util.concurrent.locks包下面:
Java当中的锁
最后在附上一篇非常好的博文:
一份针对于新手的多线程实践

猜你喜欢

转载自blog.csdn.net/barlay/article/details/83546434