千家信息网

java偏向锁的介绍和实例用法

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,本篇内容主要讲解"java偏向锁的介绍和实例用法",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"java偏向锁的介绍和实例用法"吧!说明1、要判断对象的Ma
千家信息网最后更新 2024年09月22日java偏向锁的介绍和实例用法

本篇内容主要讲解"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偏向锁的介绍和实例用法"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0