synchronized实现何时使用了自旋锁还是互斥锁? 怎么网上两种说法都有呢?JVM规范有没有规定? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有没有什么Java/JVM标准文档里面有概述呢? 给个下载地址吧,谢谢 这两个完全不是相同的概念互斥锁,一般的synchronized,ReentrantLock就是互斥锁,ReadWriteReentrantLock中的写锁也是互斥锁,读锁不是互斥锁。当线程需要获取锁的时候,而此时锁不可用,该线程就需要等待,这个等待该如何实现呢?1、用循环不断的轮询锁的状态,锁可用的时候就退出。这就是自旋锁,众所周知,这样里面基本不做什么事情的循环是非常耗CPU的,如果等待锁的时间很长,用这种方式是不合适的2、利用操作系统的指令,让线程等待,当锁可用时,让线程醒过来。这种适合需要等待长时间的。如果等待的时间短,这个操作是非常耗时的。JVM可以统计某个锁之前的等待时间,从而选择使用自旋锁还是使用操作系统指令。不过很多JVM还是使用保守的方式,大部分时候并不采用自旋锁关于使用什么锁,jvm是没有规定的。jvm只是规定当要获得的互斥锁不可用的时候,线程需要等待。 这里有相关资料:http://www.ibm.com/developerworks/cn/java/j-jtp10185/ String 字符串问题 JAVA核心技术 提问关于java后台调用外部程序的问题 请教怎样实现一个类数据库的程序`` socket客户端小问题 网页登陆的问题,急! 新手的两个简单问题,100分!关注者有分! 怎样在jb9中自动运行JBOSS?给分100! 我刚学java我想问一下,如果做下拉菜单,应该咋做?最好能给俺详细讲一下,俺是菜鸟! catch异常的时候用System.out.print()和用System.err.print()来输出有什么区别啊? 如何覆盖list里面的信息 List<User> userList = new ArrayList<User>();
有没有什么Java/JVM标准文档里面有概述呢? 给个下载地址吧,谢谢
互斥锁,一般的synchronized,ReentrantLock就是互斥锁,ReadWriteReentrantLock中的写锁也是互斥锁,读锁不是互斥锁。当线程需要获取锁的时候,而此时锁不可用,该线程就需要等待,这个等待该如何实现呢?
1、用循环不断的轮询锁的状态,锁可用的时候就退出。这就是自旋锁,众所周知,这样里面基本不做什么事情的循环是非常耗CPU的,如果等待锁的时间很长,用这种方式是不合适的
2、利用操作系统的指令,让线程等待,当锁可用时,让线程醒过来。这种适合需要等待长时间的。如果等待的时间短,这个操作是非常耗时的。JVM可以统计某个锁之前的等待时间,从而选择使用自旋锁还是使用操作系统指令。不过很多JVM还是使用保守的方式,大部分时候并不采用自旋锁关于使用什么锁,jvm是没有规定的。jvm只是规定当要获得的互斥锁不可用的时候,线程需要等待。