先看jvm对多线程关于对象锁的介绍
java虚拟机调用同步方法或者从同步方法中返回没有使用特别的操作码,当虚拟机解析对方法的符号引用时,他判断这个方法是否是同步的。如果是同步的,虚拟机在调用方法之前要获得这个锁。对于实例方法来说。
虚拟机在方法将要被调用的时候获取对象相关联的锁。对于类方法来说,他获取的是所属类的锁。其实是对Class对象上锁。当同步方法执行完毕的时候,不管正常结束还是抛出异常,虚拟机会释放锁!!
先看两个特别简单的方法 都是同步的
public void walk()
{
synchronized(this)
{
}
}
public synchronized void walk2(){}
}
你应该采用哪个方法呢
首先有两个理由
1 同步方法产生的字节码少
看两个方法产生的字节码
public void walk()
{
// 0 0:aload_0
// 1 1:dup
// 2 2:astore_1
// 3 3:monitorenter
// try 4 6 handler(s) 9
// 4 4:aload_1
// 5 5:monitorexit
// 6 6:goto 14
// finally // try 9 12 handler(s) 9
// 7 9:astore_2
// 8 10:aload_1
// 9 11:monitorexit
// 10 12:aload_2
// 11 13:athrow
// 12 14:return
}
public synchronized void walk2()
{
// 0 0:return
}
2
同步块的方法创建了异常表,finanal 是指如果发生异常,对象最后都要释放锁!!
同步方法就不一样,他持有的类对象的锁,他执行完方法一定要释放锁!!
下面看关于对线程方法的约束
分享到:
相关推荐
包含Java常见面试题,高并发、大数据、源码解读、缓存、Mq、数据库、微服务、设计模式、jvm、多线程等
本书精选了互联网大厂100道经典的Java面试题目,并为每道题目提供了详细的答案解析,涵盖了Java基础知识、面向对象编程、集合框架、多线程、JVM等方面的知识点。无论您是初学者还是有经验的开发者,都可以从中...
一、多线程高并发(concurrent、jvm包) 1.JUC多线程及高并发 1.1 多线程集合 1.2 cas 1.3 锁 1.4 队列 1.5 线程池 2.JVM+GC解析 demo 二、JDK8新特性(lamp包) 1.四大函数式接口 2.方法引用 3.构造器引用 4.数组...
3. JUC多线程及高并发+4. JVM + GC解析+6. NOSQL数据库Redis+相关源代码);我的这个看过尚硅谷面试第二季的估计都应该知道吧(github上的只有3. JUC多线程及高并发+4. JVM + GC解析,并且缺少),希望大家拿到之后,找到一...
导致JVM内存泄露的ThreadLocal详解 为什么要有ThreadLocal ThreadLocal的使用 实现解析 引发的内存泄漏分析 错误使用ThreadLocal导致 线程不安全分析
/ 112 5.2.5 服务器JVM进程崩溃 / 113 5.3 实战:Eclipse运行速度调优 / 114 5.3.1 调优前的程序运行状态 / 114 5.3.2 升级JDK 1.6的性能变化及兼容问题 / 117 5.3.3 编译时间和类加载时间的优化 / 122 5.3.4 ...
第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 [免费观看] 00:09:13分钟 | 第5节线程的状态以及各状态之间的转换详解...
volatile是JVM提供的一种最轻量级的同步机制,因为Java内存模型为volatile定义特殊的访问规则,使其可以实现Java内存模型中的两大特性...这篇文章主要介绍了Java多线程之volatile关键字及内存屏障,需要的朋友可以参考下
【多线程】多线程的实现方式Thread、Runnable、Callable 72 【多线程】实现Runnable接口与继承Thread类比较 73 【多线程】线程状态转换 74 【多线程】线程的调度 75 线程优先级 75 sleep 76 wait 76 yield 77 join ...
分别是: Java 基础、容器、多线程、反射、对象拷 贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM。...
支持解析压缩的线程转储。 如果一个线程持有多个锁,则应在“同步器”部分中针对所有涉及的锁进行记录。 在涉及的锁中添加“ Held with”标头,列出与该锁同时保留的其他锁。 使用prettyClassName()+计数器组成新...
08 15道面试常问的Java多线程面试题!.pdf 09 17道消息队列Kafka面试题!.pdf 10 18道非常牛逼的Nginx面试题!.pdf 11 20道顶尖的Spring Boot面试题!.pdf 12 20道面试官常问的JVM面试题!.pdf 13 22道面试常问的...
分别是: Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM
JUC多线程及并发、JVM+GC解析、GitHub骚操作、消息中间件MQ、NOSQL数据库Redis
了解多线程所带来的安全风险.mp4 从线程的优先级看饥饿问题.mp4 从Java字节码的角度看线程安全性问题.mp4 synchronized保证线程安全的原理(理论层面).mp4 synchronized保证线程安全的原理(jvm层面).mp4 单例问题...
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客...包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客...包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE
多线程的情况下,类的加载为什么不会出现重复加载的情况? 什么是双亲委派机制?它有啥优势?可以打破这种机制吗? 类加载子系统 类加载机制概念 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行...
│ 高并发编程第一阶段09讲、多线程与JVM内存结构的关系,虚拟机栈实验.mp4 │ 高并发编程第一阶段10讲、Thread构造函数StackSize详细讲解.mp4 │ 高并发编程第一阶段11讲、Thread构造函数StackSize详细讲解-续....
│ 高并发编程第一阶段09讲、多线程与JVM内存结构的关系,虚拟机栈实验.mp4 │ 高并发编程第一阶段10讲、Thread构造函数StackSize详细讲解.mp4 │ 高并发编程第一阶段11讲、Thread构造函数StackSize详细讲解-续....