怎么网上两种说法都有呢?
JVM规范有没有规定?

解决方案 »

  1.   


    有没有什么Java/JVM标准文档里面有概述呢? 给个下载地址吧,谢谢
      

  2.   

    这两个完全不是相同的概念
    互斥锁,一般的synchronized,ReentrantLock就是互斥锁,ReadWriteReentrantLock中的写锁也是互斥锁,读锁不是互斥锁。当线程需要获取锁的时候,而此时锁不可用,该线程就需要等待,这个等待该如何实现呢?
    1、用循环不断的轮询锁的状态,锁可用的时候就退出。这就是自旋锁,众所周知,这样里面基本不做什么事情的循环是非常耗CPU的,如果等待锁的时间很长,用这种方式是不合适的
    2、利用操作系统的指令,让线程等待,当锁可用时,让线程醒过来。这种适合需要等待长时间的。如果等待的时间短,这个操作是非常耗时的。JVM可以统计某个锁之前的等待时间,从而选择使用自旋锁还是使用操作系统指令。不过很多JVM还是使用保守的方式,大部分时候并不采用自旋锁关于使用什么锁,jvm是没有规定的。jvm只是规定当要获得的互斥锁不可用的时候,线程需要等待。
      

  3.   

    这里有相关资料:http://www.ibm.com/developerworks/cn/java/j-jtp10185/