并发之重入锁
锁作为并发共享数据,保证一致性的工具,在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 }
浙公网安备 33010602011771号