java虚拟机的一些运行时数据区会被所有线程共享,其他的数据是各个线程私有的。
因为堆和方法区是被所有线程共享的,java程序需要为两种多线程访问数据进行协调。
1)保存在堆中的实例变量
2)保存在方法区中的类变量
程序不需要协调保存在java栈中的局部变量,因为java栈中的数据是属于拥有该栈的线程私有的。
在java虚拟机中,每个对象和类在逻辑上都是和一个监视器相关联的。对于对象来说,相关联的监视器保护对象的实例变量。对于类来说,监视器保护类的类变量。如果一个对象没有实例变量,或者一个类没有变量,相关联的监视器就什么也不监视。
为了实现监视器的排他性监视能力,java虚拟机为每一个对象和类都关联一个锁。代表任何时候只允许一个线程拥有的特权。线程访问实例变量或者类变量不需锁。但是如果线程获取了锁,那么在它释放这个锁之前,就没有其他线程可以获取同样数据的锁了。(锁住一个对象就是获取对象相关联的监视器)
类锁实际上用对象锁来实现。当虚拟机装载一个class文件的时候,它就会创建一个java。lang。class类的实例。当锁住一个对象的时候,实际上锁住的是那个类的class对象。
一个线程可以多次对同一个对象上锁。对于每一个对象,java虚拟机维护一个加锁计数器,线程每获得一次该对象,计数器就加1,每释放一次,计数器就减1,当计数器值为0时,锁就被完全释放了。
java编程人员不需要自己动手加锁,对象锁是java虚拟机内部使用的。在java程序中,只需要使用同步语句或者同步方法就可以标志一个监视区域。当每次进入一个监视区域时,java虚拟机都会自动锁上对象或者类。
分享到:
- 2009-01-05 22:13
- 浏览 1744
- 评论(0)
- 论坛回复 / 浏览 (0 / 2423)
- 查看更多
相关推荐
第20章 线程同步 20.1 监视器 20.2 对象锁 20.3 指令集中对同步的支持 20.3.1 同步语句 20.3.2 同步方法 20.4 object类中的协调支持 20.5 随书光盘 20.6 资源页 附录a 按操作码助记符排列的指令...
《深入JAVA虚拟机第二版》是一本专注于Java虚拟机(JVM)的权威指南,针对JVM的深入了解和优化提供了详尽的解析。这本书对于Java开发者、系统管理员以及对Java性能调优感兴趣的读者来说,是不可或缺的参考资料。下面...
第20章 指令invokespecial 第21章 线程同步 附录A 按操作码助记符排列的指令集 附录B 按功能排列的操作码助记符 附录C 按操作码字节值排列的操作码助记符 附录D Java虚拟机的一个模拟:“Slices of Pi” 原码中的小...
本书共分20章,第1-4章解释了Java虚拟机的体系结构,包括Java栈、堆、方法区、执行引擎等;第5-20章深入描述了Java技术的内部细节,包括垃圾收集、Java安全模型、Java的连接模型和动态扩展机制、class文件、运算及...
- **第20章:线程同步** - 分析了多线程环境中同步的基本原理和技术。 ### 附录 - **A章:按操作码助记符分类的指令集** - 提供了一个按操作码助记符分类的完整指令集列表。 - **B章:按功能分组的操作码助记符**...
第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16...
深入java虚拟机第二版 第1章 Java体系结构介绍 1.1 为什么使用Java 1.2 网络带来的挑战和机遇 1.3 体系结构 1.3.1 Java虚拟机 1.3.2 类装载器的体系结构 1.3.3 Java class文件 1.3.4 Java API 1.3.5 ...
第20章 线程同步 20.1 监视器 20.2 对象锁 20.3 指令集中对同步的支持 20.3.1 同步语句 20.3.2 同步方法 20.4 Object类中的协调支持 20.5 随书光盘 20.6 资源页 附录A 按操作码助记符排列的指令...
第20章 线程同步 20.1 监视器 20.2 对象锁 20.3 指令集中对同步的支持 20.3.1 同步语句 20.3.2 同步方法 20.4 Object类中的协调支持 20.5 随书光盘 20.6 资源页 附录A 按操作码助记符排列的指令集 附录...
第20节Java虚拟机-高性能Java虚拟机00:02:58分钟 | 第21节Java虚拟机-TaobaoVM00:03:06分钟 | 第22节Java内存区域-简介00:07:56分钟 | 第23节Java内存区域-Java虚拟机栈00:12:04分钟 | 第24节Java内存区域-程序...
Java虚拟机本身是多线程的,除了主线程之外,还存在垃圾回收线程等其他线程。 接下来,我们来看看Java程序运行原理。使用Java命令运行程序时,实际上是启动了Java虚拟机。虚拟机启动后,会自动启动一个主线程,这个...
自1999年第二版发布以来,历经十余年,《Java虚拟机规范》在2011年7月迎来了针对Java SE7的重大更新,标志着JVM发展的重要里程碑。 #### 二、重要性 ##### 1. 统一性与兼容性 《Java虚拟机规范》作为一份契约文档...
- **第20章:ThreadLocalRandom的使用** 讲解`ThreadLocalRandom`类的特性,以及如何使用它来提高随机数生成的效率。 - **第21章:FutureTask的使用** 描述`FutureTask`的用途,包括如何将`Callable`和`Runnable...
《Java Threads 第二版》是一本非常全面且深入介绍Java线程编程的书籍,不仅涵盖了基本的概念和API使用,还深入探讨了线程同步、调度、并行化等高级话题。无论是对于初学者还是有经验的开发者来说,都是一本不可多得...
2. **第二章:Java环境配置** - 下载与安装JDK - 设置环境变量:JAVA_HOME、PATH、CLASSPATH - 验证Java安装:`java -version` 和 `javac -version` 3. **第三章:Java基础语法** - 变量、数据类型:基本类型...
第20讲 Java虚拟机-高性能Java虚拟机 00:02:58 第21讲 Java虚拟机-TaobaoVM 00:03:06 第22讲 Java内存区域-简介 00:07:56 第23讲 Java内存区域-Java虚拟机栈 00:12:04 第24讲 Java内存区域-程序...
- 讨论了操作系统级别的线程调度支持及其与Java虚拟机的交互。 - **6.6 其他线程调度方法** - 探索了一些替代性的线程调度策略和技术。 - **6.7 总结** - 回顾了本章内容,并强调了线程调度的重要性。 #### 第七...