Java多线程 之 类锁与对象锁
来源:互联网 发布:5s是否支持4g网络 编辑:程序博客网 时间:2024/05/01 09:36
对象锁
java的所有对象都含有1个互斥锁,这个锁由JVM自动获取和释放。线程进入synchronized方法的时候获取该对象的锁,当然如果已经有线程获取了这个对象的锁,那么当前线程会等待;synchronized方法正常返回或者抛异常而终止,JVM会自动释放对象锁。这里也体现了用synchronized来加锁的1个好处,方法抛异常的时候,锁仍然可以由JVM来自动释放。
类锁
对象锁是用来控制实例方法之间的同步,类锁是用来控制静态方法(或静态变量互斥体)之间的同步。其实类锁只是一个概念上的东西,并不是真实存在的,它只是用来帮助我们理解锁定实例方法和静态方法的区别的。我们都知道,java类可能会有很多个对象,但是只有1个Class对象,也就是说类的不同实例之间共享该类的Class对象。Class对象其实也仅仅是1个java对象,只不过有点特殊而已。由于每个java对象都有1个互斥锁,而类的静态方法是需要Class对象。所以所谓的类锁,不过是Class对象的锁而已。获取类的Class对象有好几种,最简单的就是MyClass.class的方式,即,类名.class。这个锁在单例之中常有用到。
代码示例
package net.aty.lock.target; public class TargetMethod { // 对象锁:形式1 public synchronized void objLockMethod1() { System.out.println("in...objLockMethod1"); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("out...objLockMethod1"); } // 对象锁:形式2 public void objLockMethod2() { synchronized (this) { System.out.println("in...objLockMethod2"); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("out...objLockMethod2"); } } // 类锁:形式1 public static synchronized void classLock1() { System.out.println("classLock1------in"); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("classLock1------out"); } // 类锁:形式2 public void classLock2() { synchronized (TargetMethod.class) { System.out.println("classLock2------in"); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("classLock2------out"); } } }
代码详细可参考:
http://www.cnblogs.com/hunter-zyg/articles/4689989.html
0 0
- Java多线程 之 类锁与对象锁
- Java多线程基础之对象锁的同步与异步
- java多线程之synchronized和锁对象
- Java多线程Lock对象之读写锁
- JAVA多线程之synchronized,对象锁,类锁
- Java多线程之对象锁,问:到底是哪个对象?
- Java多线程----java 对象锁
- Java多线程----java 对象锁
- Java多线程----java 对象锁
- Java多线程----java 对象锁
- Java多线程----java 对象锁
- Java多线程----java 对象锁
- 【Java多线程】类锁和对象锁
- java多线程设计wait/notify机制 (synchronized与对象锁)
- java多线程设计wait/notify机制 (synchronized与对象锁)
- JAVA--多线程同步,锁对象,条件对象
- Java多线程之锁
- Java多线程之锁
- ViewPager实现自动轮播效果
- 安卓Android自定义控件之自定义时钟
- SAX与DOM
- 三、Spring4的新功能和增强
- 2.2 常量和变量
- Java多线程 之 类锁与对象锁
- 【LeetCode】461.Hamming Distance_EASY(一)
- vs2010配置安装使用log4cplus日志系统
- bus_register(待续)
- Gitlab官方对数据删除事件的详细说明
- Bat脚本处理ftp超强案例分析
- AVL树
- 设计模式(二十三) 模板模式
- JVM GC与频繁GC