# 前言:通过阅读《读懂Java并发系列》共分为4大节、9小节
## 1. 并发基础篇
### 1) 线程的基本使用
## 2. 并发原理篇
### 2) 并发的特性
### 3) volidate、synchronized的语义和作用
### 4) CAS原理与原子操作
### 5) AQS原理
## 3. 并发工具类篇
### 6) 线程池原理和使用
### 7)阻塞队列和实际应用
### 8)并发容器的原理和应用
### 9)CopyOnWrite的含义和使用场景
## 4. 并发实战篇
1.并发基础篇
1)线程的基本使用
- 线程的状态和互相转换
- 多线程的编写
- 线程组和线程优先级
1.线程的状态和互相转换
Java中线程的状态可以通过 enum Thread.State查看
public enum State {
NEW,//新建
RUNNABLE,//可运行状态
BLOCKED,//阻塞状态
WAITING,//等待状态
TIMED_WAITING,//超时等待,超过TIME后将结束等待
TERMINATED//运行结束
}
线程(Thread)的几个方法
wait();//使线程处于等待状态 WAITING
stop();//使线程停止
terminated();
2.多线程的编写
- 研究多线程,那么如何开启一个线程?
- Runnable、Thread、Callable、ThreadPoolExecutor开启一个线程各有什么不同?Future是什么? 首先,开启一个线程
/**
* @author :掘金 Kava小王子
* @date :Created in 2021/4/12 下午10:09
* @description:创建线程demo
* @modified By:
* @version: $
*/
public class CreateThreadDemo {
public void useThread() {
Thread t = new Thread("Thread");
}
public void useRunnable() {
Thread t = new Thread(() -> {
System.out.println("通过runnable创建线程");
});
}
// 因为Callable是使用在Executor框架中,所以Callable要配合线程池使用
public void useCallable() {
Callable callable = () -> {
System.out.println("通过Callable创建线程");
return null;
};
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(15, 35, 25,
TimeUnit.SECONDS, new ArrayBlockingQueue(5000));
threadPool.submit(callable);
}
}
Callable可以让我们捕获异常以及得到线程的返回结果,但是返回结果的封装是通过Future,可以通过调用future.get()方法得到线程的执行结果,但是此方法会阻塞线程。
3.线程组和线程优先级
线程组ThreadGroup是用来对线程进行统一管理的类,含有子线程组和线程,是一个由上而下的结构,但不推荐使用。
线程优先级代表一个线程的价值,价值高的往往有极大概率被cpu优先执行。线程的优先级可通过
thread.setPriority(int num)区间1-10,未设置默认取父线程优先级