java锁
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java锁,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1517字,纯文字阅读大概需要3分钟。
内容图文
![java锁](/upload/InfoBanner/zyjiaocheng/833/5145e762975d4eee90acb34cfb138341.jpg)
---恢复内容开始---
synchronized 互斥锁
synchronized(this) 当前类的所有synchronized(this) 都被锁了,还有synchronized static也一样
synchronized代码块实际上多了monitorenter和monitorexit两条指令。monitorenter指令执行时会让对象的锁计数加1,而monitorexit指令执行时会让对象的锁计数减1
对于synchronized方法或者synchronized代码块,当出现异常时,JVM会自动释放当前线程占用的锁,因此不会由于异常导致出现死锁现象;
synchronized关键字是不能继承的,也就是说,基类的方法synchronized f(){} 在继承类中并不自动是synchronized f(){},而是变成了f(){}。继承类需要你显式的指定它的某个方法为synchronized方法。
锁从宏观上分为乐观锁和悲观锁
synchronized是悲观锁,认为写多,对读也加锁,retreentlock通过cas获取锁,获取不到才转为悲观锁。
CAS是一种更新的原子操作,比较当前值跟传入值是否一样,一样则更新,否则失败。
synchronized是重量级锁,争用不到锁的线程会进入阻塞状态。重量级锁是悲观锁的一种。
java1.5引用偏向锁和轻量锁,默认启动了自旋锁,这些都属于乐观锁。
自旋锁:如果持有锁的线程能在段时间内释放,那么等待竞争锁的线程就不做用户态与内核态的切换。避免了切换的消耗。他会做自选,这样也是会消耗cpu的,所以,应该设置一个自旋等待时间,如果过了时间还没得到锁就进入线程阻塞状态。
适用于,锁竞争不激烈,且用所时间非常短的代码块。
jdk1.7以后,是否开启自旋锁,由JVM控制,时间阈值也是自适应的,一般和线程上下文切换的时间差不多。
偏向锁是在无锁争用的情况下使用的,也就是同步开在当前线程没有执行完之前,没有其它线程会执行该同步块,一旦有了第二个线程的争用,偏向锁就会升级为轻量级锁,如果轻量级锁自旋到达阈值后,没有获取到锁,就会升级为重量级锁
内容总结
以上是互联网集市为您收集整理的java锁全部内容,希望文章能够帮你解决java锁所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。