锁的重入

简介: 锁的重入package demo;/* * synchronized的重入 * 关键字synchronized拥有锁重入得功能, * 当一个线程得到了一个对象的锁后,再次请求次对象时时可以再次得到该对象的锁。

锁的重入

package demo;

/*  
 * synchronized的重入
 * 关键字synchronized拥有锁重入得功能,
 * 当一个线程得到了一个对象的锁后,再次请求次对象时时可以再次得到该对象的锁。
 * 
 * 
 * 
 * */
public class MyDubbo {

    //在synchronized 方法一种调用synchronized 方法2,
    //方法2中又调用方法3
    public synchronized void method1(){
        System.out.println("method1....");
        method2();
    }

    public synchronized void method2(){
        System.out.println("method2....");
        method3();
    }

    public synchronized void method3(){
        System.out.println("method3....");
    }

    public static void main(String[] args) {

        final MyDubbo my1 = new MyDubbo();
        Thread t1 = new Thread(new Runnable() {

            @Override
            public void run() {
                my1.method1();
            }
        });

        //synchronized的重入  表面上看是三个方法都synchronized,以为要method1执行获取锁对象后,
        //执行完毕后,method2才能获取锁对象。事实不是这样的,synchronized重入
        //将三个方法的synchronized都去掉,结果一样,但是机制不一样。
        t1.start();
    }
}
AI 代码解读

子父类的重入

package demo;

/*
 * 子类父类之间的重入是可行的。
 * 
 *  重入得异常的捕捉。一定要考虑整体问题,处理异常。
 * */
public class MyDubbo2 {

    static class Main{
        public int num = 10 ;
        public synchronized void operationMainSup(){

            try {
                num--;
                System.out.println("Main print num = " + num );
                Thread.sleep(100);

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    static class Sub extends Main{
        public synchronized void operationSubSup() {
            try {
                while(num>0){
                    num--;
                    System.out.println("Sub print num = " + num );
                    Thread.sleep(100);
                    //父类中的方法
                    this.operationMainSup();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                Sub sub = new Sub();
                sub.operationSubSup();
            }
        });

        //开始线程
        t1.start();
    }
}
AI 代码解读
山月风成
+关注
目录
打赏
0
0
0
0
1
分享
相关文章
阿里云的证书有什么用?含金量怎么样?
对于我们现在的社会来说,想找一份好工作,就必须要有足够的能力,尤其是在IT行业中,想要得到认可,最需要的就是有能够证明自己能力的东西。
阿里云的证书有什么用?含金量怎么样?
数智洞察丨企业上云不止研发投入,业务增长价值变现,不亏!
企业在价值创造和价值变现的发展过程中,IT基础架构已经无法有效应对业务能力全面提升、数字化运营和数字化业务发展的挑战。 本文将从从业务、治理、平台、安全、运维、IT成本六大视角,解析企业上云价值。
数智洞察丨企业上云不止研发投入,业务增长价值变现,不亏!
全图化引擎(AI·OS)中的编译技术
全图化引擎又称算子执行引擎,它的介绍可以参考从HA3到AI OS -- 全图化引擎破茧之路。本文从算子化的视角介绍了编译技术在全图化引擎中的运用。主要内容有: 通过脚本语言扩展通用算子上的用户订制能力,目前这些通用算子包括scorer算子,filter算子等。
10842 0
阿里安全实验室发现“微信克隆漏洞”:可操控微信钱包窃取隐私信息,腾讯推文致谢
只需发一条消息就可以完整克隆受害者的微信账号,并实现微信钱包支付和窃取隐私信息的操控。近日,阿里安全猎户座实验室和潘多拉实验室发现微信存在一款有严重风险的漏洞,并第一时间将漏洞信息上报给了国家相关部门和同步给了腾讯公司。
3950 0
udp协议-看这篇就够了
UDP 概述 用户数据报协议 UDP 只在 IP 的数据报服务之上增加了很少一点的功能,这就是复用和分用的功能以及查错检测的功能 UDP 的主要特点 UDP 是无连接的,即发送数据之前不需要建立连接(发送数据结束时也没有连接可释放),减少了开销和发送数据之前的时延 UDP 使用尽最大努力交付,即不保证可靠交付,主机不需要维持复杂的连接状态表 UDP 是面向报文的,发送方的 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。
2879 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问