前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java的锁机制

Java的锁机制

作者头像
余生大大
发布2022-11-02 15:27:21
2280
发布2022-11-02 15:27:21
举报
文章被收录于专栏:余生大大余生大大

引入jol工具包,它可以把java对象在jvm内存中布局的情况打印出来,看一下对象在jvm中是怎么存在的

代码语言:javascript
复制
<dependency>
    <groupId>org.openjdk.jol</groupId>
    <artifactId>jol-core</artifactId>
    <version>0.15</version>
    <scope>provided</scope>
</dependency>

demo代码:

代码语言:javascript
复制
package com.example.learningdemo.demo;

import org.openjdk.jol.info.ClassLayout;

/**
 * @author Anzepeng
 * @title: JolDemo
 * @projectName learningdemo
 * @description: TODO
 * @date 2021/4/7 0007下午 15:36
 */
public class JolDemo {

    public static void main(String[] args) {
        Object object = new Object();
        System.err.println(ClassLayout.parseInstance(object).toPrintable());

        synchronized (object) {
            System.err.println(ClassLayout.parseInstance(object).toPrintable());
        }
    }
}

执行结果,java的锁就实在对象的markword中记录的一个锁状态,加锁前和加锁后只有markword发生了改变

锁状态的编码:偏向锁、轻量锁、重量锁对应不同的锁的状态

轻量级锁也叫自旋锁,不会进行线程的挂起,而是一直在自旋查看锁是否被释放

重量级锁是由操作系统进行介入,在锁被使用的时候将其他线程进行阻塞挂起,锁被释放时又进行唤醒竞争,上下线程的切换造成资源的内耗要比轻量级锁多得多

偏向锁默认是不打开的,在阻塞4秒后进行打开

如何保证3个线程同时执行

CountDownLatch、CylicBarrier、Semaphore

如何对字符串进行快速排序

fork/join框架

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档