首页 > 代码库 > Java并发程序设计(12)并发锁之可重入锁ReentrantLock
Java并发程序设计(12)并发锁之可重入锁ReentrantLock
1.1. 可重入锁ReentrantLock
ReentrantLock是java并发库中提供的可重入锁。与synchronized同步块相比,有相似也有不同。相似的地方有:
(1)都可以实现多线程之间的同步,避免对共享资源的访问冲突。
(2)都是可重入的,即一个已经获取锁的线程可以再次获得同一个锁,synchronized也类似。
不同的地方有:
(1)ReentrantLock更灵活,获取锁和释放锁可以在同一个方法中,也可以在不同方法中。synchronized通常用在同一个方法体内。
(2)ReentrantLock的执行效率比synchronized更高一些。
ReentrantLock使用时需要注意的问题是,应当将锁所保护的代码放在try{}代码块中,unlock操作放在finally{}代码块中,避免在lock操作之后unlock之前因为发生异常而导致锁没有释放。
//这是一个共享资源类。 class SharedResource { private ReentrantLock lock = new ReentrantLock(); public void visitResource(){ lock.lock(); try{ System.out.println("visitResource called: " + Thread.currentThread().getName()); } finally{ lock.unlock(); } } } public class ReentrantLockTest { public static void main(String[] args) { //创建线程池提交10个任务。 final SharedResource sr = new SharedResource(); ExecutorService executorService = Executors.newFixedThreadPool(3); for(int i=0;i<10;i++) { executorService.execute(new Runnable(){ @Override public void run() { sr.visitResource();//访问共享资源。 } }); } executorService.shutdown(); } }
Java并发程序设计(12)并发锁之可重入锁ReentrantLock
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。