Java多线程Day04-多线程之synchronized关键字

本文详细解析了Java中synchronized关键字的工作原理,包括其依赖的对象锁机制,如何通过synchronized方法和代码块实现线程间的互斥访问,以及实例锁和全局锁的区别。通过理解这些概念,开发者可以更好地控制多线程环境下的资源共享。

synchronized原理

  • Java中,每个对象有且仅有一个同步锁.即同步锁是依赖对象而存在的
  • 调用某个对象的synchronized方法时,就获取了该对象的同步锁
  • 不同线程之间对同步锁的访问是互斥的:
    • 某个时间点,对象的同步锁只能被一个线程获取
    • 通过使用同步锁,就可以在多线程中,实现对象或者方法的互斥访问

synchronized基本规则

  • 第一条: 当一个线程访问某对象synchronized方法或者synchronized代码块时,其余线程对该对象该synchronized方法或者该synchronized代码块的访问将被阻塞
  • 第二条: 当一个线程访问某对象synchronized方法或者synchronized代码块时,其余线程可以访问该对象非同步代码块
  • 第三条: 当一个线程访问某对象synchronized方法或者synchronized代码块时,其余线程对该对象其余synchronized方法或者其余synchronized代码块的访问将被阻塞

synchronized方法

  • synchronized修饰的方法叫作synchronized方法
public synchronized void runs() {
	...
}

synchronized代码块

  • synchronized修饰的代码块叫作synchronized代码块
public void runs() {
	synchronized (this) {
		...
	}
}
  • synchronized代码块中的this指代当前对象,即获取当前对象的同步锁. 也可以换成其余对象
  • synchronized代码块可以更精确控制冲突访问区域,使用效率更高

全局锁

  • 全局锁:
    • 全局锁是指类的锁
    • 无论实例化多少个对象,线程都共享该锁
    • 全局锁对象的就是static synchronized. 或者是锁在该类的class或者classloader对象上

实例锁

  • 实例锁:
    • 锁在一个实例对象上面
    • 如果该类是单例,那么该锁也具有全局锁的概念
    • 实例锁对应的就是synchronized关键字
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攻城狮Chova

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值