ITPub博客

首页 > IT职业 > IT图书 > java偏向锁的使用流程

java偏向锁的使用流程

IT图书 作者:yccsunny 时间:2021-09-11 09:47:30 0 删除 编辑

说明

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偏向锁的使用流程,希望对大家有所帮助。更多Java学习指路:Java基础

本教程操作环境:windows7系统、java10版,DELL G3电脑。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3168/viewspace-2828453/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 中介者模式
请登录后发表评论 登录
全部评论

注册时间:2019-08-30

  • 博文量
    68
  • 访问量
    633