本篇内容主要讲解“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偏向锁的介绍和实例用法”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://www.py.cn/java/jichu/32468.html