【多线程:Monitor 概念】

简介: 【多线程:Monitor 概念】

【多线程:Monitor 概念】

01.Java 对象头

以32位虚拟机为例

普通对象

解释

对象头里面包含:Mark Word(32bits)Klass Word(32bits)

Klass Word(32bits):它是一个指针 它指向了它所属的类

Mark Word(32bits):下面详细解释

数组对象

数组对象多了一个array length(32bits) 用来指定数组长度

Mark Word结构

Mark Wor(32bits) 加锁状态 State
hashcode:25 age:4 biased_lock:0 01 Normal
thread:23 epoch:2 age:4 biased_lock:1 01 Biased
ptr_to_lock_record:30 00 Lightweight Locked
ptr_to_heavyweight_montior:30 10 Heavyweight Locked
11 Marked for GC

02.Monitor

介绍

Monitor被翻译为监视器或管程,每一个java对象都可以关联一个Monitor对象,如果使用synchronized给对象上锁(重量级锁)之后,改对象头的MarkWord中被设置指向Monitor对象的指针

图片解释

202207111412665.png

我们可以看到此时为 两个线程还没有执行 临界区代码块,所以此时的obj对象的MarkWord为上述MarkWord状态中的normal状态。

202207111412608.png

之后Thread-1先执行了临界区代码,所以此时obj对象的MarkWord中加锁状态变成了10 状态变成了Heavyweight Locked,现在obj对象头的MarkWord被设置为指向Monitor的指针,并且此时Monitor正在监视Thread-1。

202207111412347.png

然后Thread-2去获取锁 发现已经被占用,然后就被放置到了阻塞列表EntryList。

目录
相关文章
|
3月前
|
Go 调度 开发者
[go 面试] 深入理解进程、线程和协程的概念及区别
[go 面试] 深入理解进程、线程和协程的概念及区别
|
5月前
|
分布式计算 JavaScript 前端开发
多线程、多进程、协程的概念、区别与联系
多线程、多进程、协程的概念、区别与联系
87 1
|
5月前
|
分布式计算 并行计算 安全
在Python Web开发中,Python的全局解释器锁(Global Interpreter Lock,简称GIL)是一个核心概念,它直接影响了Python程序在多线程环境下的执行效率和性能表现
【6月更文挑战第30天】Python的GIL是CPython中的全局锁,限制了多线程并行执行,尤其是在多核CPU上。GIL确保同一时间仅有一个线程执行Python字节码,导致CPU密集型任务时多线程无法充分利用多核,反而可能因上下文切换降低性能。然而,I/O密集型任务仍能受益于线程交替执行。为利用多核,开发者常选择多进程、异步IO或使用不受GIL限制的Python实现。在Web开发中,理解GIL对于优化并发性能至关重要。
61 0
|
6月前
|
Java
Java中的多线程编程:概念、实现与挑战
【5月更文挑战第30天】本文深入探讨了Java中的多线程编程,涵盖了多线程的基本概念、实现方法以及面临的挑战。通过对Java多线程编程的全面解析,帮助读者更好地理解多线程在Java中的应用,提高程序的性能和效率。
|
2月前
|
数据采集 消息中间件 并行计算
进程、线程与协程:并发执行的三种重要概念与应用
进程、线程与协程:并发执行的三种重要概念与应用
57 0
|
3月前
|
缓存 前端开发 JavaScript
一篇文章助你搞懂java中的线程概念!纯干货,快收藏!
【8月更文挑战第11天】一篇文章助你搞懂java中的线程概念!纯干货,快收藏!
36 0
一篇文章助你搞懂java中的线程概念!纯干货,快收藏!
|
4月前
|
Java 程序员 调度
Java中的多线程编程:概念、实现及性能优化
【5月更文挑战第85天】本文主要探讨了Java中的多线程编程,包括其基本概念、实现方式以及如何进行性能优化。首先,我们将介绍多线程的基本概念,然后详细讨论如何在Java中实现多线程,包括继承Thread类和实现Runnable接口两种方式。最后,我们将探讨一些提高多线程程序性能的策略,如使用线程池和减少同步开销等。
|
4月前
|
监控 Java 调度
Java面试题:描述Java线程池的概念、用途及常见的线程池类型。介绍一下Java中的线程池有哪些优缺点
Java面试题:描述Java线程池的概念、用途及常见的线程池类型。介绍一下Java中的线程池有哪些优缺点
73 1
|
4月前
|
缓存 Linux 编译器
【Linux】多线程——线程概念|进程VS线程|线程控制(下)
【Linux】多线程——线程概念|进程VS线程|线程控制(下)
66 0
|
4月前
|
存储 Linux 调度
【Linux】多线程——线程概念|进程VS线程|线程控制(上)
【Linux】多线程——线程概念|进程VS线程|线程控制(上)
69 0

热门文章

最新文章

相关实验场景

更多