并发之重入锁

锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利。

重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。
在JAVA环境下 ReentrantLock 和synchronized 都是 可重入锁

 1 public class Test implements Runnable {
 2     public  synchronized void get() {
 3         System.out.println("name:" + Thread.currentThread().getName() + " get();");
 4         set();
 5     }
 6 
 7     public synchronized  void set() {
 8         System.out.println("name:" + Thread.currentThread().getName() + " set();");
 9     }
10 
11     @Override
12 
13     public void run() {
14         get();
15     }
16 
17     public static void main(String[] args) {
18         Test ss = new Test();
19         new Thread(ss).start();
20         new Thread(ss).start();
21         new Thread(ss).start();
22         new Thread(ss).start();
23     }
24 }
25 
26 public class Test02 extends Thread {
27     ReentrantLock lock = new ReentrantLock();
28     public void get() {
29         lock.lock();
30         System.out.println(Thread.currentThread().getId());
31         set();
32         lock.unlock();
33     }
34     public void set() {
35         lock.lock();
36         System.out.println(Thread.currentThread().getId());
37         lock.unlock();
38     }
39     @Override
40     public void run() {
41         get();
42     }
43     public static void main(String[] args) {
44         Test ss = new Test();
45         new Thread(ss).start();
46         new Thread(ss).start();
47         new Thread(ss).start();
48     }
49 
50 }

 

posted on 2018-10-27 11:16  jovelove  阅读(162)  评论(0)    收藏  举报