码迷,mamicode.com
首页 > 编程语言 > 详细

Java并发程序设计(12)并发锁之可重入锁ReentrantLock

时间:2017-03-24 21:44:57      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:java   地方   不同方法   问题   executor   oid   style   提交   string   

1.1. 可重入锁ReentrantLock

 

ReentrantLockjava并发库中提供的可重入锁。与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

标签:java   地方   不同方法   问题   executor   oid   style   提交   string   

原文地址:http://www.cnblogs.com/coe2coe/p/6613534.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!