Skip to content

Commit 738d23e

Browse files
authored
Merge pull request crossoverJie#74 from xumeng/master
修改文字错误
2 parents 5e595b7 + f04759c commit 738d23e

File tree

6 files changed

+10
-10
lines changed

6 files changed

+10
-10
lines changed

MD/ArrayList.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ transient Object[] elementData;
117117

118118
## Vector
119119

120-
`Voctor` 也是实现于 `List` 接口,底层数据结构和 `ArrayList` 类似,也是一个动态数组存放数据。不过是在 `add()` 方法的时候使用 `synchronize` 进行同步写数据,但是开销较大,所以 `Vector` 是一个同步容器并不是一个并发容器。
120+
`Vector` 也是实现于 `List` 接口,底层数据结构和 `ArrayList` 类似,也是一个动态数组存放数据。不过是在 `add()` 方法的时候使用 `synchronized` 进行同步写数据,但是开销较大,所以 `Vector` 是一个同步容器并不是一个并发容器。
121121

122122
以下是 `add()` 方法:
123123
```java

MD/Cache-design.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020

2121
写缓存时也要注意,通常来说分为以下几步:
2222

23-
- 开启事物
23+
- 开启事务
2424
- 写入 DB 。
25-
- 提交事物
25+
- 提交事务
2626
- 写入缓存。
2727

2828
这里可能会存在数据库写入成功但是缓存写入失败的情况,但是也不建议将写入缓存加入到事务中。

MD/ReentrantLock.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ReentrantLock 实现原理
22

3-
使用 `synchronize` 来做同步处理时,锁的获取和释放都是隐式的,实现的原理是通过编译后加上不同的机器指令来实现。
3+
使用 `synchronized` 来做同步处理时,锁的获取和释放都是隐式的,实现的原理是通过编译后加上不同的机器指令来实现。
44

55
`ReentrantLock` 就是一个普通的类,它是基于 `AQS(AbstractQueuedSynchronizer)`来实现的。
66

MD/Threadcore.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
# Java 多线程三大核心
22

33
## 原子性
4-
`Java` 的原子性就和数据库事物的原子性差不多,一个操作中要么全部执行成功或者失败。
4+
`Java` 的原子性就和数据库事务的原子性差不多,一个操作中要么全部执行成功或者失败。
55

66
`JMM` 只是保证了基本的原子性,但类似于 `i++` 之类的操作,看似是原子操作,其实里面涉及到:
77

88
- 获取 i 的值。
99
- 自增。
1010
- 再赋值给 i。
1111

12-
这三步操作,所以想要实现 `i++` 这样的原子操作就需要用到 `synchronize` 或者是 `lock` 进行加锁处理。
12+
这三步操作,所以想要实现 `i++` 这样的原子操作就需要用到 `synchronized` 或者是 `lock` 进行加锁处理。
1313

1414
如果是基础类的自增操作可以使用 `AtomicInteger` 这样的原子类来实现(其本质是利用了 `CPU` 级别的 的 `CAS` 指令来完成的)。
1515

@@ -56,7 +56,7 @@ public final boolean compareAndSet(long expect, long update) {
5656

5757
使用 `volatile` 关键词修饰的变量每次读取都会得到最新的数据,不管哪个线程对这个变量的修改都会立即刷新到主内存。
5858

59-
`synchronize`和加锁也能能保证可见性,实现原理就是在释放锁之前其余线程是访问不到这个共享变量的。但是和 `volatile` 相比开销较大。
59+
`synchronized`和加锁也能能保证可见性,实现原理就是在释放锁之前其余线程是访问不到这个共享变量的。但是和 `volatile` 相比开销较大。
6060

6161
## 顺序性
6262
以下这段代码:
@@ -71,7 +71,7 @@ int c = a + b ; //3
7171

7272
重排在单线程中不会出现问题,但在多线程中会出现数据不一致的问题。
7373

74-
Java 中可以使用 `volatile` 来保证顺序性,`synchronize 和 lock` 也可以来保证有序性,和保证原子性的方式一样,通过同一段时间只能一个线程访问来实现的。
74+
Java 中可以使用 `volatile` 来保证顺序性,`synchronized 和 lock` 也可以来保证有序性,和保证原子性的方式一样,通过同一段时间只能一个线程访问来实现的。
7575

7676
除了通过 `volatile` 关键字显式的保证顺序之外, `JVM` 还通过 `happen-before` 原则来隐式的保证顺序性。
7777

MD/concurrent/volatile.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ public class VolatileInc implements Runnable{
127127
128128
- 所以想到达到线程安全可以使这三个线程串行执行(其实就是单线程,没有发挥多线程的优势)。
129129

130-
- 也可以使用 `synchronize` 或者是锁的方式来保证原子性。
130+
- 也可以使用 `synchronized` 或者是锁的方式来保证原子性。
131131

132132
- 还可以用 `Atomic` 包中 `AtomicInteger` 来替换 `int`,它利用了 `CAS` 算法来保证了原子性。
133133

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Java 知识点,继续完善中。
2626

2727
### Java 多线程
2828
- [多线程中的常见问题](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Thread-common-problem.md)
29-
- [synchronize 关键字原理](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Synchronize.md)
29+
- [synchronized 关键字原理](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Synchronize.md)
3030
- [多线程的三大核心](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Threadcore.md)
3131
- [对锁的一些认知](https://github.com/crossoverJie/Java-Interview/blob/master/MD/Java-lock.md)
3232
- [ReentrantLock 实现原理 ](https://github.com/crossoverJie/Java-Interview/blob/master/MD/ReentrantLock.md)

0 commit comments

Comments
 (0)