auto commit

This commit is contained in:
CyC2018
2019-11-02 12:07:41 +08:00
parent 182e1440a4
commit bb6e0df82d
784 changed files with 7545 additions and 2827 deletions

View File

@ -384,7 +384,7 @@ Java 提供了两种锁机制来控制多个线程对共享资源的互斥访问
## synchronized
**1. 同步一个代码块**
**1. 同步一个代码块**
```java
public void func() {
@ -441,7 +441,7 @@ public static void main(String[] args) {
```
**2. 同步一个方法**
**2. 同步一个方法**
```java
public synchronized void func () {
@ -451,7 +451,7 @@ public synchronized void func () {
它和同步代码块一样作用于同一个对象
**3. 同步一个类**
**3. 同步一个类**
```java
public void func() {
@ -490,7 +490,7 @@ public static void main(String[] args) {
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
```
**4. 同步一个静态方法**
**4. 同步一个静态方法**
```java
public synchronized static void fun() {
@ -538,27 +538,27 @@ public static void main(String[] args) {
## 比较
**1. 锁的实现**
**1. 锁的实现**
synchronized JVM 实现的 ReentrantLock JDK 实现的
**2. 性能**
**2. 性能**
新版本 Java synchronized 进行了很多优化例如自旋锁等synchronized ReentrantLock 大致相同
**3. 等待可中断**
**3. 等待可中断**
当持有锁的线程长期不释放锁的时候正在等待的线程可以选择放弃等待改为处理其他事情
ReentrantLock 可中断 synchronized 不行
**4. 公平锁**
**4. 公平锁**
公平锁是指多个线程在等待同一个锁时必须按照申请锁的时间顺序来依次获得锁
synchronized 中的锁是非公平的ReentrantLock 默认情况下也是非公平的但是也可以是公平的
**5. 锁绑定多个条件**
**5. 锁绑定多个条件**
一个 ReentrantLock 可以同时绑定多个 Condition 对象
@ -669,7 +669,7 @@ before
after
```
**wait() sleep() 的区别**
**wait() sleep() 的区别**
- wait() Object 的方法 sleep() Thread 的静态方法
- wait() 会释放锁sleep() 不会
@ -907,12 +907,12 @@ other task is running...
java.util.concurrent.BlockingQueue 接口有以下阻塞队列的实现
- **FIFO 队列** LinkedBlockingQueueArrayBlockingQueue固定长度
- **优先级队列** PriorityBlockingQueue
- **FIFO 队列** LinkedBlockingQueueArrayBlockingQueue固定长度
- **优先级队列** PriorityBlockingQueue
提供了阻塞的 take() put() 方法如果队列为空 take() 将阻塞直到队列中有内容如果队列为满 put() 将阻塞直到队列有空闲位置
**使用 BlockingQueue 实现生产者消费者问题**
**使用 BlockingQueue 实现生产者消费者问题**
```java
public class ProducerConsumer {