线程学习记录-synchronized初探

线程学习记录-synchronized 初探

synchronized是有锁升级的概念,它代表三种类型的锁

  • 偏向锁
  • 轻量级锁
  • 重量级锁

jdk1.6之前,synchronized其实都是os锁

重量级锁(os):

  • 重量级锁是操作系统级别的锁,它的执行过程类型下面的linux函数调用过程

    • pthread_mutex_t mt mt理解为int类型
    • pthread_mutex_t_init(mt) 0 mt初始化为0
    • pthread_mutex_t_lock(mt) 1 mt变成1
    • pthread_mutex_t_unlock(mt)0 mt变成0
  • 他有什么用,为什么1.6以后要优化它 重点:sync os锁,它是互斥锁,也就是互斥场景都需要它

  • 但是,如果不需要资源和竞争,是不是可以不用互斥锁,所以有了偏向锁。

偏向锁

简单理解为栈中保存获得锁的线程id,如果有其他线程来争夺锁,就会膨胀升级,

偏向锁只有在第一次获取锁时才会调用操作系统函数。

怎么证明偏向锁存在呢?

  • 写好java的同步方法,只有一个线程执行该方法。
  • 修改linux源码,当pthread_mutex_lock()被执行时,打印对应线程id
  • main方法启动后,其实会有许多jvm自动开启的线程运行并加锁,如何找到同步方法的执行线程id?
  • 我们可以在java方法中,打印当前开启的线程id。比较java和linux的打印结果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值