`
qianshangding
  • 浏览: 124543 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java类锁和对象锁

 
阅读更多
在并发环境下,采用锁的方式来解决对共享资源的互斥访问。在Java中,锁可以分类如下两类:

对象锁

JAVA中所有的对象都有一个同步锁,每个同步锁会有一个计数器,JVM负责跟踪对象被加锁的次数,没有线程获取该对象的锁时,计数器的值为0,如果一个线程第一次对这个对象加锁,那么计数器的值就为1,之后相同的线程在获得该对象的锁时,计数都会递增的加1,如果相同的线程对此对象解锁,那么计数器就会减1,当计算器为0时,其他线程就可以获取到该对象的同步锁了,一般线程离开一个synchronized方法或者synchronized代码块计数器就会递减。
获取对象锁的方式:
第一种:
public synchronized void method() {};
第二种:
Object object = new Object();
public void method() {
     synchronized(object) {
         //方法体
    }
}

类锁

其实没有什么类锁,所谓类锁实际上就是这个类的对象的对象锁,也就是说每个类都是一个java.lang.Class对象,类锁就是这个类的类对象锁。


获取类锁的方式:

第一种:
synchronized (xxx.class) {}
第二种:
synchronized (Class.forName("xxx")) {...}
第三种:
public static synchronized void method(){...}

如果想同时获取类锁和对象锁,也是允许的,但是在编程的过程中要注意锁嵌套导致死锁的问题。


释放锁

如下三种方式会释放同步锁:
1,正常运行完同步块,同步锁被释放。
2,运行同步代码块异常终止,同步锁也会被释放。
3,调用了同步锁所属对象的wait()方法,这个线程就会释放对象锁,进入对象的等待池中。

注:线程调用Thread.sleep或者Thread.yield方法并不释放同步锁,只是把运行的机会让给其他的线程。wait会释放同步锁。

本篇不打算举实例了,真正理解了锁机制,就能判断的出来。
分享到:
评论

相关推荐

    Java对象锁和类锁全面解析(多线程synchronize

    Java对象锁和类锁全面解析(多线程synchronized关键字)编程开发技术共14页.pdf.zip

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

    利用锁对象和条件对象实现了对线程的控制,具体的讲解可以参考我的博客

    Java类锁、对象锁、私有锁冲突测试

    主要介绍了Java类锁、对象锁、私有锁冲突测试,得出结论是加锁方法够成了竞争关系,同一时刻只能有一个方法能执行,需要的朋友可以参考下

    详解java 对象锁与类锁

    主要介绍了java 对象锁与类锁的相关资料,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下

    透彻理解Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别

    主要介绍了Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别,希望对大家有所帮助,一起跟随小编过来看看吧

    java的Lock锁原理详解.docx

    同样是锁,先说说synchronized和lock的...2.synchronized可以锁住代码块,对象和类,但是线程从开始获取锁之后开发者不能进行控制和了解;lock则用起来非常灵活,提供了许多api可以让开发者去控制加锁和释放锁等等。

    synchronized锁原理分析(一、从Java对象头看synchronized锁的状态)

    Lock接口实现的锁不一样,例如ReentrantLock锁是基于JDK实现的,有Java原生代码来实现的。 synchronized 锁的是什么? Object o = new Object(); synchronized (o){ System.out.println("执行代码"); } 上面这段...

    JAVA_API1.6文档(中文)

    java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器。 java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 ...

    Java对象内存布局(对象头信息锁升级)示例

    Java对象内存布局(对象头信息锁升级)示例

    Java对象锁

    在并发环境下,解决共享资源冲突问题时,可以考虑使用锁机制。  1.对象的锁  所有对象都自动含有单一的锁。  JVM负责跟踪对象被加锁的次数。...  2.1同步到单一对象锁  当使用同步块时,如果方法下的同步块

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

    第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式...

    Java虚拟机中对象探秘--对象头创建、对象头、对象锁、synchoronized底层实现.docx

    对象所需内存大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把一块确定大小的内存从java堆中划分出来。根据java堆内存是否绝对规整,划分方法不同: 1)指针碰撞(Bump the Pointer): Java堆中内存绝对...

    Java后端面试问题整理.docx

    • 熟悉Java多线程并发中线程基本方法,线程池,线程生命周期,熟悉Java锁中常见锁分类(乐观/悲观锁、自旋锁、独/共享锁、可重入锁、公平/非公平锁、分段锁、偏向锁,轻/重量级锁)和基本的锁升级策略

    Java 1.6 API 中文 New

    java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器。 java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java...

    javacore和dump分析工具

    javacore.txt文件用jca打开,heapdump.phd文件用ha打开。...包括 Java 虚拟机的参数,环境变量,内存段的分配情况,垃圾回收日志,各种内部锁的状态,各线程在当前时刻的运行栈,以及类加载状态等。

    基于java的锁具装箱的源程序代码

    基于java的锁具装箱源程序,可以很好的运行并且运行环境是myeclipse6.5 其他的不用过,不知道行不行,好像eclipse可以用

    java api最新7.0

    java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器。 java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java...

    大厂真题之字节跳动-Java初级

    - 代码块(对象锁与类锁均可); 2. Lock 采用 lock()对代码加锁,unlock()进行解锁 参考文章:https://blog.csdn.net/yx0628/article/details/79086511 2、怎么利用反射获取类中的对象? 1. 获取 Class 对象 2. ...

    解析Java编程之Synchronized锁住的对象

    主要介绍了解析Java编程之Synchronized锁住的对象,具有一定参考价值,需要的朋友可以了解下。

Global site tag (gtag.js) - Google Analytics