synchronized实现何时使用了自旋锁还是互斥锁?

weichuang002 2012-08-23 10:17:45
怎么网上两种说法都有呢?
JVM规范有没有规定?
...全文
484 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
weichuang002 2012-08-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

互斥锁 是指锁的类型
自旋锁 是指锁的实现方式

互斥锁可以用自旋来实现,自旋也可以去实现非互斥锁
[/Quote]

这个要顶,够专业。
戏子 2012-08-24
  • 打赏
  • 举报
回复
第一次见这个东西,跟踪学习下
龙四 2012-08-24
  • 打赏
  • 举报
回复
互斥锁 是指锁的类型
自旋锁 是指锁的实现方式

互斥锁可以用自旋来实现,自旋也可以去实现非互斥锁
龙四 2012-08-24
  • 打赏
  • 举报
回复
龙四 2012-08-24
  • 打赏
  • 举报
回复
这两个完全不是相同的概念
互斥锁,一般的synchronized,ReentrantLock就是互斥锁,ReadWriteReentrantLock中的写锁也是互斥锁,读锁不是互斥锁。

当线程需要获取锁的时候,而此时锁不可用,该线程就需要等待,这个等待该如何实现呢?
1、用循环不断的轮询锁的状态,锁可用的时候就退出。这就是自旋锁,众所周知,这样里面基本不做什么事情的循环是非常耗CPU的,如果等待锁的时间很长,用这种方式是不合适的
2、利用操作系统的指令,让线程等待,当锁可用时,让线程醒过来。这种适合需要等待长时间的。如果等待的时间短,这个操作是非常耗时的。

JVM可以统计某个锁之前的等待时间,从而选择使用自旋锁还是使用操作系统指令。不过很多JVM还是使用保守的方式,大部分时候并不采用自旋锁

关于使用什么锁,jvm是没有规定的。jvm只是规定当要获得的互斥锁不可用的时候,线程需要等待。
weichuang002 2012-08-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

互斥锁
[/Quote]

有没有什么Java/JVM标准文档里面有概述呢? 给个下载地址吧,谢谢
scbb 2012-08-23
  • 打赏
  • 举报
回复
互斥锁

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧