`
chasingdeer
  • 浏览: 8753 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

转载:java对象锁&类锁

 
阅读更多
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实例对象。
分享到:
评论

相关推荐

    Thinking in C: Foundations for Java & C++

    Thinking in C: Foundations for Java & C++ by Chuck Allison produced by Bruce Eckel Chapter 1: Introduction and Getting Started40 MinutesStart Lecture Chapter 2: Fundamental Data Types41 ...

    java错误处理:java.lang.OutOfMemoryError: Java heap space

    ### Java 错误处理:java.lang.OutOfMemoryError: Java heap space 在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang....

    本项目适合于新手小白入门快速了解掌握Java 大部分必备知识,用于Java的学习与进阶,也可以用于回忆巩固Java 基础用法语法

    Study1 类: Java 父类与子类...Study14 类:Java 线程同步与锁机制 Study15 类:Java 并发包 Study16 类:Java 动态代理 Study17 类:Java 字节流与字符流 Study18 类:Java NIO与NIO.2 Study19 类:Java Socket编程

    java锁详解.pdf

    Java 锁可以分为两大类:synchronized 锁和 ReentrantLock 锁。 一、Synchronized 锁 1. 锁的原理:synchronized 锁是基于对象头的 Mark Word 来实现的。Mark Word 中有一个锁标志位,用于标识对象的锁状态。 2. ...

    java多线程的条件对象和锁对象demo

    本示例"java多线程的条件对象和锁对象demo"着重探讨了如何利用锁对象和条件对象来精细控制线程的执行流程。 首先,我们需要了解Java中的锁对象。Java提供了多种类型的锁,其中最基础的是`synchronized`关键字,它...

    Java 面向对象 练习题与答案

    本资源摘要信息涵盖了 Java 面向对象编程的多个知识点,包括 Font 类、Toolkit 类、包机制、抽象类、数组操作等。 1. Font 类: Font 类是 Java 中的一个类,用于设置程序中的字体实例对象。 Font 类有三个参数:...

    头歌之Java面向对象 - 常用类.rar

    里面的内容为: 第1关:Object类 第2关:JAVA基础类型包装类-练习 第3关:String&StringBuilder&StringBuffer类-练习 第4关:Random类 第5关:Date类和SimpleDateFormat类的用法 第6关:Math类

    java源码:Windows密码锁.zip

    Java源码:Windows密码锁.zip是一个包含用于创建一个基于Java的Windows登录屏幕锁定程序的源代码的压缩包。这个项目通常被用作学习Java编程、图形用户界面(GUI)设计以及安全性的实例。在这个项目中,开发者会使用...

    彻底理解Java中的各种锁.pdf

    在Java中,ReentrantReadWriteLock类是读写锁的实现,它包含两个锁:读锁(共享锁)和写锁(独占锁)。读锁可以被多个线程同时持有,而写锁是独占的,当写锁被占用时,其他线程既不能获取读锁也不能获取写锁。 5. ...

    java乐观锁原理与实现案例分析

    java乐观锁原理与实现案例分析 java乐观锁是一种乐观的并发控制机制,它认为线程冲突的可能性小,比较乐观,直接去操作数据,如果发现数据已经被更改(通过版本号控制),则不更新数据,再次去重复所需操作,知道...

    java锁机制Synchronizedjava锁机制Synchronized

    "Java 锁机制 Synchronized" Java 锁机制 Synchronized 是 Java 语言中的一种同步机制,用于解决多线程并发访问共享资源时可能出现的一些问题。 Java 锁机制 Synchronized 的概念 在 Java 中,每个对象都可以被...

    各种锁汇总,乐观锁、悲观锁、分布式锁、可重入锁、互斥锁、读写锁、分段锁、类锁、行级锁等

    8. **类锁**:类锁是Java中类级别的锁,通过synchronized修饰类的静态方法或者同步代码块实现,确保同一时间只有一个类实例执行特定的代码。 9. **行级锁**:在数据库管理系统中,行级锁只锁定被操作的数据行,其他...

    java-syn.zip_Java syn_Java syn锁_java同步锁syn_java锁 syn_syn同步事务锁

    Java 同步锁是Java多线程编程中的关键概念,用于确保多个线程在访问共享资源时能够有序、安全地进行。在这个主题中,我们将详细探讨Java中的同步机制,包括同步方法、同步代码块、synchronized关键字以及其背后的...

    Java Named Lock:Java 命名锁-开源

    在Java中,我们可以使用多种方式实现命名锁,例如使用`java.util.concurrent.locks.ReentrantLock`类,通过存储锁对象的映射来关联锁名。此外,还有一些开源库,如`com.lmax.disruptor.SleepingWaitStrategy`或`org....

    Java的锁机制的学习和使用

    Java语言提供了多种锁机制,包括`synchronized`关键字、`ReentrantLock`类以及`ReadWriteLock`接口等。 #### 二、synchronized关键字详解 `synchronized`是Java中一种最基本的锁机制,它可以修饰实例方法、静态...

    JAVA面向对象程序设计(期末考试试题及答案).zip

    1. **类与对象**:在Java中,类是对象的蓝图,定义了对象的属性(数据成员)和行为(方法)。对象是类的实例,具有类所定义的属性和行为。 2. **封装**:封装是OOP的基石,通过访问修饰符(如public, private, ...

    java期末综合练习题

    6. 对象互斥锁:在Java中,使用`synchronized`关键字可以给对象加互斥锁,以实现线程同步。 7. 线程执行体定义:线程的执行体通常通过定义`run()`方法来实现,当调用线程对象的`start()`方法时,Java会自动调用`run...

    json转对象(java 多级嵌套)

    Jackson库的主要类包括`JsonParser`和`ObjectMapper`,它们可以帮助我们将JSON数据映射到Java对象上。 1. **引入Jackson库** 首先,需要在项目中引入Jackson库。如果你使用的是Maven,可以在pom.xml文件中添加以下...

    使用Java实现面向对象编程

    4. **多态**:多态性允许不同类型的对象对同一消息作出响应,Java通过方法重写(Override)和抽象类、接口来实现多态。 5. **构造器**:构造器是类的一个特殊方法,用于初始化新创建的对象。Java中的构造器与类同名...

    一个简单的java类,说明了锁的粒度

    1. **类级别锁(Class-Level Lock)**:当`synchronized`修饰静态方法或静态代码块时,锁住的是整个类的Class对象。这意味着,无论实例化了多少个对象,只有一个线程可以执行静态同步代码,适用于所有实例共享的资源...

Global site tag (gtag.js) - Google Analytics