• 014 锁重入


    一 .概述

    在synchronized之中可能有一个悖论,就是获得锁的线程调用两个互相调用的加锁方法会出现什么情况,如果处置不当,那么就会发生死锁.

      但是幸运的是,synchronized是可以重入的.


    二 .例子

    public class Reentrant {
        
        private synchronized void methodA() {
            System.out.println("invoke A");
            methodB();
        }
        
        private synchronized void methodB() {
            System.out.println("invoke B");
        }
        
        public static void main(String[] args) {
            Reentrant demo = new Reentrant();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    demo.methodA();
                }
            }).start();
        }
    }

    运行结果并没有发生我们可能会认为的死锁问题,也就说明了synchronized是可以重入的.


    三 .总结

      锁重入保证了线程不会因为自己连续调用同一内置对象而发生死锁问题,这是使用锁的时候需要注意的一个问题,当然我们很可能

        根本从来不去考虑这个问题.

  • 相关阅读:
    nginx平滑升级及回滚
    redis源码安装
    memcached安装
    Harbor源码部署
    Maven源码部署
    tomcat单机多实例(未完待续)
    部署tomcat
    nginx编译参数详解
    CentOS7 安装pip/pip3
    nginx 部署配置
  • 原文地址:https://www.cnblogs.com/trekxu/p/8996217.html
Copyright © 2020-2023  润新知