2、synchronized关键字

2、synchronized关键字


1.引出synchronized

在java中,当使用多线程操作共享资源时,很容易出现数据不一致问题。

场景: 当售票时,很多窗口同时售票,但去往一个目的的票数总共只有100张,当200人同一时间买该目的地票时,如何控制不会出现超卖、少卖的情况呢?
这个时候我们需要控制不管谁买到了票,另外的所有人都会看到票总数在减少,直至售完。

synchronized 故名思意是用来做数据同步的,被其修饰的代码块是具有原子性的。
原子性即:该操作是不可拆分的。

2.synchronized用法

​ java中,我们通常会理解synchronized是用来锁住共享资源的。

​ 在java中,synchronized可以锁对象,锁方法,代码块,锁的开始和结束部分之间的操作都是原子性操作。

3.synchronized原理分析

在java中,每个对象都有一个monitor对象,这个对象其实就是java对象的锁。通常认为是内置锁。
当某个线程占有某个对象的时候,先判断该对象monitor的计数器是不是0,为0则没有线程占有,此时占有这个对象,并且将对象monitor的计数器加1。如果monitor不为0,表示这个对象已经被其他线程占用。

使用jconsole查看线程运行状态
在这里插入图片描述

使用jstack pid查看线程运行状态
在这里插入图片描述

javap反编译
锁对象
在这里插入图片描述

锁方法
在这里插入图片描述

扩展:锁分很多种,偏向锁、轻量级锁、重量级锁、无锁有待仔细考量。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值