zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }

    结果如下:

     结果说明:

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

  • 相关阅读:
    ORACLE的专用模式和共享模式(转)
    用TSQL修改数据库的恢复模型
    Python中的数组
    hotmail是如何被劫持的?
    [收藏] vss自动备份
    在Oracle中模拟ms Sql 中的自动增加字段
    Oracle重建所有表和索引
    CentOS6.0安装PostgreSQL9.1
    linux查找文件命令find
    Linux修改网络配置
  • 原文地址:https://www.cnblogs.com/java-spring/p/11753865.html
Copyright © 2011-2022 走看看