扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本篇内容主要讲解“java偏向锁的介绍和实例用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java偏向锁的介绍和实例用法”吧!
创新互联公司是一家集网站建设,玛沁企业网站建设,玛沁品牌网站建设,网站定制,玛沁网站建设报价,网络营销,网络优化,玛沁网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
说明
1、要判断对象的MarkWord是否属于偏向模式。
如果不属于,进入轻量级锁判断逻辑。否则,继续下一步判断。
2、判断当前请求锁的线程ID是否与偏向锁本身记录的线程ID一致。
如果一致,继续下一步判断,如果不一致,跳转到步骤4;
3、判断是否需要重偏向。
重偏向逻辑将在下一节解释批量重偏向和批量撤销。如无需,直接获得偏向锁;
4、使用CAS算法更改对象的MarkWord。
将线程ID部分转换为线程ID,若更换成功,则重偏完成,获得偏向锁。若失败,则表明有多线程竞争,升级为轻量级锁。
实例
public class Demo2 { Object o = new Object(); //.c 文件打印出java threaid 对应的os threadid public native void tid(); static { System.loadLibrary("TestThreadNative"); } public static void main(String[] args) { //打印出主线程 System.out.println("java---java---java---java---java---java---java---java---java---"); Demo2 example4Start = new Demo2(); example4Start.start(); } public void start() { Thread t1 = new Thread() { @Override public void run() { while (true) { sync(); } } }; Thread t2 = new Thread() { @Override public void run() { while (true) { sync(); } } }; t1.setName("t1"); t2.setName("t2"); t1.start(); } public void sync() { synchronized (o) { // java threadid 是jvm给的线程id 并不是真是的os 对应的线程id // System.out.println(Thread.currentThread().getId()); //获取java thread 对应的真实的os thread 打印出id tid(); } } }
到此,相信大家对“java偏向锁的介绍和实例用法”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流