多线程学习笔记-互斥锁

		public void show1(String str) {
			int len =str.length();
			synchronized (this) { 
							
			for (int i = 0; i < len; i++) {
				System.out.print(str.charAt(i));
			}
			System.out.println();		
		}
		}
		
		public  static synchronized void show3(String str) {
			int len =str.length();					
			for (int i = 0; i < len; i++) {
				System.out.print(str.charAt(i));
			}
			System.out.println();					
		}
想要show1和show3互斥就需要把this改成 类名.class 获取的是字节码对象锁

**

Java 对象的创建过程

**
当一个对象被创建时,虚拟机就会为其分配内存来存放对象自己的实例变量及其从父类继承过来的实例变量(即使这些从超类继承过来的实例变量有可能被隐藏也会被分配空间)。在为这些实例变量分配内存的同时,这些实例变量也会被赋予默认值(零值)。在内存分配完成之后,Java虚拟机就会开始对新创建的对象按照程序猿的意志进行初始化。在Java对象初始化过程中,主要涉及三种执行对象初始化的结构,分别是 实例变量初始化、实例代码块初始化 以及 构造函数初始化。

也就是说this获取的是类实例化之后类的对象锁。

**

类的加载

**
类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在内存中创建一个Java.lang.Class对象用来封装类在方法区内的数据结构。
show3加了static的静态方法,他是在加载类的时候就会生成出来show3方法。
而他拿的锁对象是Java.lang.Class对象,不是对象实例化后的对象。

所以我们可以通过 类名.class 来获取***Java.lang.Class对象*** 这样就能起到同步的作用、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值