java对象锁&类锁(2010-05-30 14:28:12)转载标签: 杂谈 分类: java线程
对象锁
当一个对象中有synchronized method或synchronized block的时候调用此对象的同步方法或进入其同步区域时,就必须先获得对象锁。如果此对象的对象锁已被其他调用者占用,则需要等待此锁被释放
同步静态方法/静态变量互斥体
由于一个class不论被实例化多少次,其中的静态方法和静态变量在内存中都只由一份。所以,一旦一个静态的方法被申明为synchronized。此类所有的实例化对象在调用此方法,共用同一把锁,我们称之为类锁。一旦一个静态变量被作为synchronized block的mutex。进入此同步区域时,都要先获得此静态变量的对象锁
类锁
由上述同步静态方法引申出一个概念,那就是类锁。其实系统中并不存在什么类锁。当一个同步静态方法被调用时,系统获取的其实就是代表该类的类对象的对象锁
在程序中获取类锁
可以尝试用以下方式获取类锁
synchronized (xxx.class) {...}
synchronized (Class.forName("xxx")) {...}
同时获取2类锁
同时获取类锁和对象锁是允许的,并不会产生任何问题,但使用类锁时一定要注意,一旦产生类锁的嵌套获取的话,就会产生死锁,因为每个class在内存中都只能生成一个Class实例对象。
分享到:
相关推荐
### Java 错误处理:java.lang.OutOfMemoryError: Java heap space 在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang....
Java对象锁和类锁是Java多线程编程中至关重要的概念,它们是通过`synchronized`关键字来实现的,用于确保代码在并发环境下的线程安全。在这个全面解析中,我们将深入探讨这两个锁机制,理解它们的工作原理以及如何在...
Study1 类: Java 父类与子类...Study14 类:Java 线程同步与锁机制 Study15 类:Java 并发包 Study16 类:Java 动态代理 Study17 类:Java 字节流与字符流 Study18 类:Java NIO与NIO.2 Study19 类:Java Socket编程
本示例"java多线程的条件对象和锁对象demo"着重探讨了如何利用锁对象和条件对象来精细控制线程的执行流程。 首先,我们需要了解Java中的锁对象。Java提供了多种类型的锁,其中最基础的是`synchronized`关键字,它...
里面的内容为: 第1关:Object类 第2关:JAVA基础类型包装类-练习 第3关:String&StringBuilder&StringBuffer类-练习 第4关:Random类 第5关:Date类和SimpleDateFormat类的用法 第6关:Math类
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于前后端交互,而Java作为后端开发的主要语言,常常需要将JSON格式的数据与Java类对象进行相互转换,以便于数据的处理和传输。Jackson库是...
在Java的`java.util.concurrent.locks`包中,`ReentrantReadWriteLock`类实现了读写锁的功能。这个锁允许多个读取者同时访问资源,但在有写入者时,所有读取者和写入者都会被阻塞,以确保数据的一致性。下面我们将...
java乐观锁原理与实现案例分析 java乐观锁是一种乐观的并发控制机制,它认为线程冲突的可能性小,比较乐观,直接去操作数据,如果发现数据已经被更改(通过版本号控制),则不更新数据,再次去重复所需操作,知道...
4. **对象头设置**:对象头包含运行时数据,如对象的类信息、哈希码、GC信息、锁状态等。在HotSpot JVM中,对象头分为两部分:Mark Word和类型指针。 - **Mark Word**:存储对象的动态信息,如哈希码、年龄、锁状态...
"Java 锁机制 Synchronized" Java 锁机制 Synchronized 是 Java 语言中的一种同步机制,用于解决多线程并发访问共享资源时可能出现的一些问题。 Java 锁机制 Synchronized 的概念 在 Java 中,每个对象都可以被...
8. **类锁**:类锁是Java中类级别的锁,通过synchronized修饰类的静态方法或者同步代码块实现,确保同一时间只有一个类实例执行特定的代码。 9. **行级锁**:在数据库管理系统中,行级锁只锁定被操作的数据行,其他...
在Java中,ReentrantReadWriteLock类是读写锁的实现,它包含两个锁:读锁(共享锁)和写锁(独占锁)。读锁可以被多个线程同时持有,而写锁是独占的,当写锁被占用时,其他线程既不能获取读锁也不能获取写锁。 5. ...
1. **类与对象**:在Java中,类是对象的蓝图,定义了对象的属性(数据成员)和行为(方法)。对象是类的实例,具有类所定义的属性和行为。 2. **封装**:封装是OOP的基石,通过访问修饰符(如public, private, ...
精通 Hibernate_Java 对象持久化技术详解(第2版).pdf
这些知识点包括:`Thread`类与`Runnable`接口的区别、`synchronized`关键字的作用、`stop()`与`suspend()`方法为何不推荐使用、`sleep()`与`wait()`的区别、同步锁与非同步锁的不同、线程的状态及其转换等。...
java中的乐观锁与悲观锁,synchronized与ReentrantLock重入锁的说明与比较
Java学习系列(五):Java面向对象之抽象类、接口、内部类、枚举类详解 本章节主要讲解Java面向对象的其他概念,包括抽象类、接口、内部类、枚举类。抽象类是一种特殊的类,不能被实例化,用于定义一些公用的方法和...
9. **集合框架**:Java集合框架包括List、Set、Map等接口和ArrayList、HashSet、HashMap等实现类,它们提供了存储和管理对象的容器。 10. **泛型**:泛型是Java SE 5.0引入的新特性,用于在编译时检查类型安全,...
Jackson库的主要类包括`JsonParser`和`ObjectMapper`,它们可以帮助我们将JSON数据映射到Java对象上。 1. **引入Jackson库** 首先,需要在项目中引入Jackson库。如果你使用的是Maven,可以在pom.xml文件中添加以下...