Synchronized 互斥块(对象锁) 一个对象和一个monitor 的关系

本文详细探讨了Synchronized关键字在Java中的使用,包括三种形式:指定对象、当前对象和同步方法。重点阐述了锁住的对象实际上是监视器(Monitor),并解释了如何通过synchronized保护共享资源,防止并发问题。通过一个银行个人账户的示例,说明了多个线程如何在 Monitor 的控制下有序访问和修改共享数据,确保线程安全。
摘要由CSDN通过智能技术生成

Synchronized  :锁住的是对象,出现synchronized表示随后的代码块要用到共享数据了,要锁住了。

一、3种形式。

1、synchronized(obj):可以任意指定对象.

2、synchronized(this):当前对象:当一个类加到内存时,常量池有一个地址直接指向当前正在执行的对象.

 3、public synchronized void run():当前对象(this),这是实例方法,每一方法里存着一个This.方法

对象:可以是普通类 public class Test {}, 也可以是干活线程类 ,只要是new 类名 的所有对象。

     **所以synchronized(this){} 和synchronized 方法差不多,反正是锁当前对象。

  

二、对于锁类其实也一样,因为一个类入内存后,还是java.lang.Class 的类对象。所以还是锁对象。

三、锁的数据:一个类成员数据:对象实例变量,类变量

  1、object instance variables:对象实例变量,存在堆中。

  2、class variables:类变量,存在method area。

    如果您正在写一个变量,这个变量有可能随后被另一个线程读,

     或您正在读一个变量,这个变量有可能随后被另一个线程写,

这时你必须用到变量的地方放一个synchronized,

四、例子

1、简单需求

例如:银行个人账户(对象):卡号,余额

  如果一个小店主,顾客很多,如果都用微信付款的话,有可能同一时刻访问店主的银行个人账户的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值