synchronize类锁用父类作为锁能否锁住代码块
如果有一个父类,Demo如下
public class Demo {
public void demo1(){
synchronized (Demo.class){
while (true){
System.out.println(Thread.currentThread());
}
}
}
}
其中,代码块锁住的内容为父类的字节码对象,这个父类有两个子类继承其对象
public class DemoSon extends Demo implements Runnable{
@Override
public void run() {
demo1();
}
}
public class DemoSon2 extends Demo implements Runnable{
@Override
public void run() {
demo1();
}
}
此时测试一下
public class Test {
public static void main(String[] args) {
Thread thread1 = new Thread(new DemoSon());
Thread thread2 = new Thread(new DemoSon2());
thread1.start();
thread2.start();
}
}
结果为
可以看到只有一个线程在运行,另一个线程没有进入demo1方法,锁有效, 证明用父类作为类锁,可以锁住子类对父类方法的调用,父类即使被子类调用了,其字节码对象还是只有一份,不会被不通的子类创建不同的字节码对象。
synchronize类锁用父类作为锁能否锁住代码块的更多相关文章
- java内置锁实现锁住代码块方案(同一个对象或锁住整个类.class)
我们看一个例子: class Demo { public synchronized void test() { System.out.println("test方法开始执行,当前线程为:&q ...
- Throwable类中3个异常处理的方法和finally代码块
/* Throwable类中定义了3个异常处理的方法 String getMessage() 返回此 throwable 的简短描述. String toString() 返回此 throwable ...
- 深入理解Java中的同步静态方法和synchronized(class)代码块的类锁
一.回顾学习内容 在前面几篇博客中我我们已经理解了synchronized对象锁.对象锁的重入.synchronized方法块.synchronized非本对象的代码块, 链接:https://www ...
- Java第11次作业:什么是继承?继承的好处?什么是覆写?super()?构造代码块?子父类初始化顺序? 抽象类能用final声明吗?final关键字声明类 方法 变量以及全局常量?抽象类的构造方法?
什么是继承? 继承是以父类为基础,子类可以增加新的数据或新的功能.子类不能选择性地继承父类.这种技术使得复用以前的代码非常容易. JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一 ...
- 偏向锁,偏向线程id ,自旋锁
理解锁的基础知识 如果想要透彻的理解Java锁的来龙去脉,需要先了解以下基础知识. 基础知识之一:锁的类型 锁从宏观上分类,分为悲观锁与乐观锁. 乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发 ...
- 静态(static)代码块、构造代码块、构造函数、父类子类执行顺序
静态代码块:static修饰的代码块. 在类加载-初始化的时候进行,主要目的是给变量赋予初始值 构造代码块:直接在类中定义且没有加static关键字的代码块称为构造代码块. java会把构造代码块放到 ...
- Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序
实例化子类时,父类与子类中的静态代码块.实例代码块.静态变量.实例变量.构造函数的执行顺序是怎样的? 代码执行的优先级为: firest:静态部分 second:实例化过程 详细顺序为: 1.父类静态 ...
- JAVASE(十)面向对象:特性之多态性、Object类、代码块、关键字:static、final、父子类执行顺序
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.面向对象的特性之:多态性 多态性的理解:事物的多种形态 1.1 广义上多态性的体现:①方法的重写,重 ...
- Java类的成员之四:代码块.
3.2类的成员之四:代码块 ①初始化块(代码块)作用:对Java对象进行初始化 ②程序的执行顺序: ③一个类中初始化块若有修饰符,则只能被static修饰,称为静态代码块(static block ) ...
随机推荐
- JDK中的BitMap实现之BitSet源码分析
前提 本文主要内容是分析JDK中的BitMap实现之java.util.BitSet的源码实现,基于JDK11编写,其他版本的JDK不一定合适. 文中的图比特低位实际应该是在右边,但是为了提高阅读体验 ...
- mysql 的 if 和 SQL server 的 iif
在sql语句中,mysql 使用 if 而SQL server 使用iif 如 mysql : SELECT IF(1<2,'yes ','no'); sql server: SELECT II ...
- 默认安装的phpMyAdmin会存在哪些安全隐患
利用: 1. 利用慢查询日志写入webshell 2. phpMyAdmin的setup目录暴露一些隐私信息 3. 通过phpMyAdmin修改php的ini配置 ...
- Kotlin 协程一 —— 全面了解 Kotlin 协程
一.协程的一些前置知识 1.1 进程和线程 1.1.1基本定义 1.1.2为什么要有线程 1.1.3 进程与线程的区别 1.2 协作式与抢占式 1.2.1 协作式 1.2.2 抢占式 1.3 协程 二 ...
- 《剑指offer》面试题34. 二叉树中和为某一值的路径
问题描述 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 示例: 给定如下二叉树,以及目标和 sum = 22, 5 ...
- 学习鸟哥linux私房菜--安装中文输入法fcitx
首先需要卸载前面安装的scim,查阅命令,参考网址如下 http://www.cnblogs.com/propheteia/archive/2012/06/26/2563383.html 链接中博主采 ...
- 利用SelectPdf插件将网页生成PDF
简介 适用于.NET Framework和.NET Core的HTML至PDF转换器 SelectPdf提供的在线html到pdf转换器使用.NET的Select.Pdf库中的html到pdf转换器. ...
- P1518 [USACO2.4]两只塔姆沃斯牛 The Tamworth Two
// Problem: P1518 [USACO2.4]两只塔姆沃斯牛 The Tamworth Two // Contest: Luogu // URL: https://www.luogu.com ...
- 什么是HTTP? HTTP 和 HTTPS 的区别?
转载地址: 面试官:什么是HTTP? HTTP 和 HTTPS 的区别? 一.HTTP HTTP (HyperText Transfer Protocol),即超文本运输协议,是实现网络通信的一种规范 ...
- 第05讲:Flink SQL & Table 编程和案例
Flink系列文章 第01讲:Flink 的应用场景和架构模型 第02讲:Flink 入门程序 WordCount 和 SQL 实现 第03讲:Flink 的编程模型与其他框架比较 第04讲:Flin ...