先看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虚拟机(JVM)和多线程是Java开发者必须掌握的重要概念,它们在面试中经常被问到,尤其对于高级职位来说更是如此。这份"java面试-JVM+多线程三个版本面试题,全集.zip"包含了针对这两个主题的全面问题集,旨在...
《JVM_多线程高并发_集合框架_数据库 BAT面试金典常见80问.pdf》这份资料聚焦于Java开发人员在面试中可能遇到的重要问题,涵盖了JVM、多线程高并发、集合框架和数据库等多个核心领域。以下是对这些知识点的详细说明...
总的来说,JVM解析编译过的class文件是一个复杂的过程,涉及众多细节。开发者不仅要理解编译过程,还需要熟悉JVM的内部机制,才能更好地驾驭这个强大的平台。通过阅读相关博文,如给定的链接,可以进一步深入了解...
标题和描述中提到的是与"JVM面试题、多线程面试题"相关的内容,而标签和压缩包内的文件名却提及"python编程"。为保持一致性并提供准确的信息,我将专注于JVM和多线程相关的面试知识点。 **JVM(Java虚拟机)面试...
由于 Java 多线程是通过交替线程轮流切换并分配处理器时间的方式来实现的,在任何一个确定的时间里,在处理器的一个内核只会执行一条线程中的指令。因此为了线程等待结束需要恢复到正确的位置执行,每条线程都会有一...
在Java开发中,JVM(Java Virtual Machine)是运行所有Java程序的核心,它负责解析字节码并执行。为了确保应用程序高效稳定地运行,开发者需要对JVM进行监控,了解其内部状态,如内存使用、线程活动等。本文将探讨...
在Java编程领域,多线程和Java虚拟机(JVM)是两个至关重要的主题,尤其在面试中常常被考察。本文将围绕这两个核心概念展开,深入解析相关知识点,并结合常见的面试问题进行阐述。 首先,我们来看看多线程。在单核...
6. 多线程:JVM支持多线程并发执行,每个线程都有自己的程序计数器和虚拟机栈。 7. 安全管理:JVM执行严格的类型检查和权限控制,确保代码的安全性。 8. 调优工具:如JVisualVM、JConsole等,帮助开发者监控和调整...
本文将深入探讨“多线程实战应用”这一主题,结合提供的标签“源码”和“工具”,我们将从理论基础到实践案例,全面解析多线程的核心概念及其在实际开发中的应用。 首先,我们需要理解什么是线程。线程是操作系统...
由于Java是多线程并发执行的,每个线程都需要有一个独立的程序计数器,以便记录线程切换后继续执行的位置。 #### 虚拟机栈 虚拟机栈是Java方法执行的内存模型。每当一个方法被执行时,Java虚拟机会同步创建一个栈帧...
【Java多线程解析】 Java中的多线程技术是编程中的一个重要领域,它允许程序同时执行多个任务,从而更高效地利用CPU资源。在Java中,多线程主要用于模拟现实世界中的并发行为,例如"生产者-消费者"模型。本文将深入...
JVM的设计和实现涉及到多个关键概念,包括类加载、字节码执行、内存管理和多线程支持。 1. 类加载(Class Loading): 类加载是JVM将Java源代码编译成的`.class`文件加载到内存中的过程。这个过程通常由类加载器...
在准备大数据面试的过程中,Java基础是必不可少的一部分,尤其聚焦于集合类、多线程和JVM这三大核心领域。下面将分别对这三个方面进行深入探讨。 **一、Java集合类** Java集合框架是处理对象组的重要工具,它包括...
Java支持多线程编程,这使得程序能够同时处理多个任务。线程同步和通信是Java并发编程的关键,包括锁(synchronized关键字)、死锁、活锁、阻塞队列等概念。掌握这些,可以编写出高效、稳定的并发程序。 Java集合...
Java虚拟机(JVM)是Java程序运行的核心组件...总的来说,JVM的内存模型设计是为了高效地执行多线程Java程序,并通过垃圾回收机制管理内存,防止内存泄露。理解JVM的工作原理对于优化Java程序性能、排查问题至关重要。
对于长时间持有锁或者多线程并行度高的应用,禁用偏向锁(通过`-XX:-UseBiasedLocking`)可能有助于提升性能。默认情况下,JVM开启偏向锁。 3. **自旋锁**: 自旋锁是一种非阻塞同步机制,当线程尝试获取锁但锁被...
此外,JVM支持多线程并发执行,通过线程上下文切换和同步机制保证并发安全。 8. 性能监控与调优: JVM提供了一系列工具,如JConsole、VisualVM等,用于监控和分析JVM的运行状态,帮助开发者进行性能调优。 通过...
在高并发场景下,多线程技术使得服务器能同时处理多个请求,提高服务效率。在Java中,可以使用Thread类或Runnable接口来创建线程。服务器需要监听特定端口,接收到请求后,创建新的线程来处理,从而避免了单线程模型...