Synchronized锁重入:

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

public class SyncReUseService {synchronized public void service1(){System.out.println("service1");service2();}synchronized public void service2(){System.out.println("service2");service3();}synchronized public void service3(){System.out.println("service3");}
}public class SyncReUseServiceThread extends Thread {@Overridepublic void run() {super.run();SyncReUseService service = new SyncReUseService();service.service1();}
}public class ThreadRunMain {public static void main(String[] args) {testSyncReUseServiceThread();}public static void testSyncReUseServiceThread(){SyncReUseServiceThread t = new SyncReUseServiceThread();t.start();}
}

运行结果:

当存在父子继承关系时,子类也可以通过“可重入锁”调用父类的同步方法。

public class FatherClass {public int i = 10;synchronized public void operateIMainMethod(){try {i--;System.out.println("Father class print i = " + i);Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}}public class SunClass extends FatherClass {synchronized public void operateISubMethod(){try {while (i > 0) {i--;System.out.println("Sun class print i = " + i);Thread.sleep(100);this.operateIMainMethod();}} catch (InterruptedException e) {e.printStackTrace();}}
}public class FatherSunThread extends Thread {@Overridepublic void run() {super.run();SunClass sub = new SunClass();sub.operateISubMethod();}
}public class ThreadRunMain {public static void main(String[] args) {testFatherSunThread();}public static void testFatherSunThread(){FatherSunThread t = new FatherSunThread();t.start();}
}

运行结果:

转载于:https://www.cnblogs.com/AK47Sonic/p/7721727.html

Java 学习笔记之 Synchronized锁重入相关推荐

  1. 【转载】Java多线程编程2--同步锁定--synchronized同步方法、脏读、锁重入

        线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 1.方法内的变量为线程安全   "非线程安全"问题存在于"实例变量"中,如果是方法内 ...

  2. Java多线程4:synchronized锁机制

    脏读 一个常见的概念.在多线程中,难免会出现在多个线程中对同一个对象的实例变量进行并发访问的情况,如果不做正确的同步处理,那么产生的后果就是"脏读",也就是取到的数据其实是被更改过 ...

  3. syncnized锁重入

    分享链接:synchronized锁重入_给自己一个前行的动力-CSDN博客 笔记:在继承环境中子类可调用父类的同步方法. 在继承关系中,同步是不可继承的.

  4. JAVA学习笔记 -- JUC并发编程

    1 进程.线程 进程就是用来加载指令.管理内存.管理IO.当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程.进程可以被视为程序的一个实例. 线程,一个线程就是一个指令流,将指令流 ...

  5. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  6. 12.synchronized的锁重入、锁消除、锁升级原理?无锁、偏向锁、轻量级锁、自旋、重量级锁

    小陈:呼叫老王...... 老王:来了来了,小陈你准备好了吗?今天我们来讲synchronized的锁重入.锁优化.和锁升级的原理 小陈:早就准备好了,我现在都等不及了 老王:那就好,那我们废话不多说 ...

  7. Java学习笔记(原创)

    Java学习笔记(原创) 2011-12-01 16:37:00|  分类: Java|举报|字号 订阅 下载LOFTER客户端 基本知识 一. Java基础 1. java语言的特点: ①简单:没有 ...

  8. 疯狂Java学习笔记(69)---------Lock

    疯狂Java学习笔记(69)---------Lock Java并发编程:Lock 在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问.本文我们继续来探讨这个问题,从Java ...

  9. Java学习笔记---多线程并发

    Java学习笔记---多线程并发 (一)认识线程和进程 (二)java中实现多线程的三种手段 [1]在java中实现多线程操作有三种手段: [2]为什么更推荐使用Runnable接口? [3][补充知 ...

最新文章

  1. 真的超越了波士顿动力!深度强化学习打造的 ANYmal 登上 Science 子刊
  2. PyAlgoTrade Hello World 第一个程序(一)
  3. 软考高项之质量管理-攻坚记忆
  4. raid卡缓存对硬盘性能_Mac Pro 2019加装2.5英寸机械硬盘方案
  5. 学习响应式BootStrap来写融职教育网站,Bootsrtap第十天你的收获
  6. 华为交换机不同网段互访_华为S5700系列交换机使用高级ACL限制不同网段的用户互访...
  7. (IOS)截图Demo
  8. Java多线程中Sleep与Wait的区别
  9. python每行乘列表_python – 在pandas数据帧中查找每行的两列列表中哪一列的最快方法...
  10. 处理之后的图像句柄传到显示框_PS基本原理,图像变换与变形操作,移动图像小技巧...
  11. 为初学者收集的一些C语言学习资料
  12. win10自带抓包工具_Win10商店抓包工具(UWP挖掘机)下载 v1.1
  13. 网络编程(含 UrlConnection 发送 HTTP 请求下载文件)
  14. SSL证书中DV证书、OV证书和EV证书的区别
  15. Anaconda, Spyder更新导致Spyder环境奔溃
  16. 为什么别人可以年薪百万?
  17. 10种室内定位技术原理深度解析
  18. matlab求最大公倍数_matlab求最大公约数和最小公倍数
  19. java 执行Linux命令并打印执行结果
  20. 中北大学工程硕士计算机技术,中北大学工程硕士专业排名

热门文章

  1. 前嗅ForeSpider教程:采集图片/视频/资源文件的链接地址 1
  2. sed基本用法 sed文本块处理 、 sed高级应用
  3. 返回固定数据的web服务器
  4. [Erlang 0079] RabbitMQ 初探
  5. Git-github 的基本应用
  6. Silverlight C# 游戏开发:自定义鼠标(一)
  7. Spring 事务 状态信息的创建、回滚、清理、提交
  8. python字符串的删除操作_Python字符串操作
  9. ssh整合之三(实现逻辑)
  10. Java反射机制获取系统@Hide属性