Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitcf10e63

Browse files
committed
feat:新增读书笔记
1 parent0e389ed commitcf10e63

File tree

2 files changed

+34
-110
lines changed

2 files changed

+34
-110
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#第2章 Java并发机制的底层原理
2+
3+
##1. valatile关键字
4+
5+
`valatile`是轻量级的`synchronized`,在多处理器开发中保证了共享变量的`可见性`
6+
7+
>可见性是指当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。
8+
9+
如果`valatile`关键字使用恰到,它的使用和执行成本会比`synchronized`底,因为它不会引起线程上下文的切换和调度。 如果一个字段被声明成`valatile`,Java线程内存模型确保所有线程看到这个变量的值是一致的。
10+
11+
##2. synchronized关键字
12+
13+
Java中的每一个对象都可以作为锁。
14+
15+
- 对于普通同步方法,锁的是当前实例对象。
16+
- 对于静态同步方法,锁的是当前类的Class对象。
17+
- 对于同步方法块,锁的是`synchronized`括号里面配置的对象。
18+
19+
当一个线程试图访问同步代码块时候,首先线程必须得到锁,退出或抛出异常时必须释放锁。
20+
21+
##3. Java对象头
22+
23+
`synchronized`用的锁是存在Java对象头里面的,如果对象是数组类型,则虚拟机用3个字宽存储对象头,如果对象是非数组类型,则用2字宽存储对象头。
24+
25+
##4. Java中的锁
26+
27+
**锁的优缺点总结**
28+
29+
|| 优点| 缺点| 适用场景|
30+
| :------:| :----------------------------------------------------------:| :----------------------------------------------:| :----------------------------------:|
31+
| 偏向锁| 加锁和解锁不需要额外的开销,和执行非同步方法相比仅存在纳秒级的差距| 如何线程之间存在锁竞争,会带来额外的锁撤销的消耗| 适用于只有一个线程访问同步块场景|
32+
| 轻量级锁| 竞争的线程不会阻塞,提高了程序的响应速度| 如果始终得不到锁竞争的线程,使用自旋会消耗CPU| 追求响应时间、头同步块执行速度非常快|
33+
| 重量级锁| 线程竞争不使用自旋,不会消耗CPU| 线程阻塞,响应时间缓慢| 追求吞吐量,同步块执行速度较长|
34+

‎docs/数据结构/常用数据结构.md

Lines changed: 0 additions & 110 deletions
This file was deleted.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp