黑马程序员技术交流社区

标题: 【太原校区】java中的重入锁 [打印本页]

作者: 郝永亮    时间: 2018-12-19 10:47
标题: 【太原校区】java中的重入锁
本帖最后由 郝永亮 于 2018-12-19 10:51 编辑

锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized(重量级) 和 ReentrantLock(轻量级)等等 ) 。这些已经写好提供的锁为我们开发提供了便利。
重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。
在JAVA环境下 ReentrantLock 和synchronized 都是 可重入锁
[Java] 纯文本查看 复制代码
public class Test implements Runnable {

     public  synchronized void get() {//get方法获取this锁
         System.out.println("name:" + Thread.currentThread().getName() + " get();");
         set();//get方法调用set方法,set方法也可以获取到this锁,这就是重入锁
     }
     public synchronized  void set() {
         System.out.println("name:" + Thread.currentThread().getName() + " set();");
     }
     @Override
     public void run() {
         get();
     }

     public static void main(String[] args) {
         Test ss = new Test();
         new Thread(ss).start();
         new Thread(ss).start();
         new Thread(ss).start();
         new Thread(ss).start();
     }
}

[Java] 纯文本查看 复制代码
public class Test02 extends Thread {
     ReentrantLock lock = new ReentrantLock();

     public void get() {
         lock.lock();//GET方法获取锁
         System.out.println(Thread.currentThread().getId());
         set();//GET方法调用SET方法,SET方法也获取同样的锁,这把锁lock就是重入锁
         lock.unlock();
     }
     public void set() {
         lock.lock();
         System.out.println(Thread.currentThread().getId());
         lock.unlock();
     }
     @Override
     public void run() {
         get();
     }
     public static void main(String[] args) {
         Test ss = new Test();
         new Thread(ss).start();
         new Thread(ss).start();
         new Thread(ss).start();
     }
}




作者: miaohangbo    时间: 2018-12-19 10:54
收藏收藏
作者: 张兆秋    时间: 2018-12-19 10:54
沙发
作者: cuichang1    时间: 2018-12-19 10:56

作者: liuchengwei1    时间: 2018-12-19 11:21

作者: 郝永亮    时间: 2018-12-19 13:33
优秀
作者: Vicky韦    时间: 2018-12-19 13:48
真好
作者: liudongjie    时间: 2018-12-19 18:49

作者: 达摩侠    时间: 2018-12-20 12:44
顶顶顶顶顶起来
作者: renhua    时间: 2018-12-20 13:29





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2