Java 多线程同步机制synchronized互斥锁总结

本文详细介绍了Java中的synchronized同步机制,包括互斥锁的概念、作用以及内存可见性。synchronized保证了多线程环境下对临界资源的互斥访问,并提供了内存可见性保证。通过synchronized关键字,线程在访问同步代码块或方法时会获取对象级别的锁,实现原子性和线程间的同步。此外,类级别的锁用于控制对静态成员变量和静态方法的并发访问。
摘要由CSDN通过智能技术生成

在并发编程中,多线程同时并发访问的资源叫做临界资源,当多个线程同时访问对象并要求操作相同资源时,分割了原子操作就有可能出现数据的不一致或数据不完整的情况,为避免这种情况的发生,我们会采取同步机制,以确保在某一时刻,方法内只允许有一个线程。

采用synchronized修饰符实现的同步机制叫做互斥锁机制,它所获得的锁叫做互斥锁。每个对象都有一个monitor(锁标记),当线程拥有这个锁标记时才能访问这个资源,没有锁标记便进入锁池。任何一个对象系统都会为其创建一个互斥锁,这个锁是为了分配给线程的,防止打断原子操作。每个对象的锁只能分配给一个线程,因此叫做互斥锁。

我们对使用同步机制获取互斥锁的情况,进行几点说明:

  1. 如果同一个方法内同时有两个或更多线程,则每个线程有自己的局部变量拷贝。(线程工作内存与主内存区别)
  2. 类的每个实例都有自己的对象级别锁。当一个线程访问实例对象中的synchronized同步代码块或同步方法时,该线程便获取了该实例的对象级别锁,其他线程这时如果要访问synchronized同步代码块或同步方法,便需要阻塞等待,直到前面的线程从同步代码块或方法中退出,释放掉了该对象级别锁。
  3. 访问同一个类的不同实例对象中的同步代码块,不存在阻塞等待获取对象锁的问题&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值