Java中synchronization的三种应用方式

1 :synchronization的三种修饰情况(为什么使用synchronization:避免多线程同时访问共享资源时造成的并发问题)
1.1:修饰实例方法,作用于当前的实例加锁,进入同步代码前要获得当前实例的锁
如下代码未使用synchronization进行修饰时
在这里插入图片描述
结果为什么出现 192924 而不是期望值 200000:当线程 t1,t2,同时操作 i 时,i为共享的资源;
线程执行分为2 步,第一步为 获取 i 的值,第二步为 i++
可能出现当 线程 t1 获取 i 时还未执行完 i++这个过程中,线程 t2 也获得了 i ,接着也继续执行;
例如:t1 获取 i = 100 时,未执行 i++,t2 也获取 i=100,当t1,t2都执行完此次 i ++ 时,i=101并不是
102,所有循环完的结果 < 200000;

方法加上 synchronization进行修饰,如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值