synchronized原理
来源:互联网 发布:ajax如何解析json数据 编辑:程序博客网 时间:2024/06/05 20:29
在多线程并发编程中Synchronized
一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6
对Synchronized
进行了各种优化之后,有些情况下它并不那么重了。
CAS(Compare and Swap),用于在硬件层面上提供原子性操作。
基础
Java中的每一个对象都可以作为锁。
- 对于同步方法,锁是当前实例对象。
- 对于静态同步方法,锁是当前对象的Class对象。
- 对于同步方法块,锁是
Synchonized
括号里配置的对象。
当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。那么锁存在哪里呢?锁里面会存储什么信息呢?
线程对锁的竞争
当多个线程同时请求某个对象监视器时,对象监视器会设置几种状态用来区分请求的线程:
Contention List
:所有请求锁的线程将被首先放置到该竞争队列Entry List
:Contention List中那些有资格成为候选人的线程被移到Entry ListWait Set
:那些调用wait方法被阻塞的线程被放置到Wait SetOnDeck
:任何时刻最多只能有一个线程正在竞争锁,该线程称为OnDeckOwner
:获得锁的线程称为Owner!Owner
:释放锁的线程
新请求锁的线程将首先被加入到ConetentionList
中,当某个拥有锁的线程(Owner状态)调用unlock之后,如果发现EntryList
为空则从ContentionList
中移动线程到EntryList
阅读全文
0 0
- Synchronized原理
- Synchronized 原理
- synchronized 原理
- synchronized 原理
- synchronized原理
- synchronized原理
- synchronized锁机制原理
- 3.3Synchronized原理
- synchronized 实现原理分析
- Java的synchronized原理
- Java Synchronized 原理介绍
- Java的synchronized原理
- synchronized实现原理
- synchronized实现原理
- synchronized原理浅析
- 深入synchronized原理详解
- Synchronized及其实现原理
- synchronized及其实现原理
- 产品分析报告|读书新贵——《网易蜗牛读书》
- offsetof宏与container_of宏
- vue-resource jsonp跨域问题解决方法
- [Android Studio系列(五)] Android Studio手动配置Gradle的方法
- HBase读取数据
- synchronized原理
- Markdown使用之如何满足中文阅读习惯,实现首行缩进?
- Linux下动态监测设备拔插程序
- linux解压集合
- Java并发编程:Timer和TimerTask(转载)
- FTPrep: 45 Jump Game 2
- 前端散乱笔记汇总
- HashMap和Hashtable的区别
- 解决 mysql 存储过程 repeat 循环多一次