• Synchronized可重入锁通俗易懂的简单分析


    可重入锁概念:

    当一个线程得到一个对象锁后,再次请求此对象时时可以再次得到该对象的锁的,这也证明synchronized方法/块的内部调用本类的其他synchronized方法/块时,时永远可以得到锁的。

    public class Service {
    
        synchronized public void service1() {
            System.err.println("service1");
            service2();
        }
    
        synchronized public void service2() {
            System.err.println("service2");
            service3();
        }
    
        synchronized public void service3() {
            System.err.println("service3");
    
        }
    
    }
    public class SyncTest {
        public static void main(String[] args) {
            Service service = new Service();
            service.service1();
        }
    }

    输出结果如下:

    运行结果说明:

    自己可以再次获取自己的内部锁。比如有一条线程获得了某个对象多的锁,此时这个对象锁还没有释放,当其再次想要获取这个对象的锁的时候还是可以获取的,如果不可锁重入的话就会造成死锁

    可重入锁也支持父子类继承的环境中:

    父类创建

    public class Main {
    
        public int i = 10;
    
        public synchronized void operateMainMethon() {
            try {
                i--;
                System.err.println("main print i=" + i);
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    子类创建

    public class Sub extends Main {
    
        public synchronized void operateSubMethon() {
            try {
                while (i > 0) {
                    i--;
                    System.err.println("sub print i=" + i);
                    Thread.sleep(100);
                    this.operateMainMethon();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    结果如下:

     结果说明:

    当存在父子类进程关系时,子类时完全可以通过"可重入锁"调用父类的同步方法的

  • 相关阅读:
    HDU 5363 Key Set(快速幂取模)
    HDU 5339 Untitled(暴搜)
    POJ 2406 Power Strings
    Dedecms备份还原网站有效方法
    DEDECMS文章列表每隔8行文章添加分隔虚线
    DEDECMS突破TAG和关键字长度的限制
    为织梦dedecms制作全文RSS订阅源
    DedeCms中Channel用typeid无效
    织梦CMS/Dedecms添加自定义函数
    sql批量换dedecms文章来源和作者
  • 原文地址:https://www.cnblogs.com/java-spring/p/11753865.html
Copyright © 2020-2023  润新知