JUC并发编程1
1.JUC是什么?
JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包,JDK 1.5开始出现的。
2.进程和线程
-
线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
-
一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线
Java默认有两个线程 1.main 2.GC
3.并发和并行
并发:不同的代码块交替执行
并行:不同的代码块同时执行
获取CPU核数
Runtime.getRuntime().availableProcessors();
4.线程状态
wait和sleep的区别
1.来自不同的类
wait =>object
sleep=>Thread
2.关于线程的释放
wait会释放
3.适用范围
wait必须在同步代码块中
4.是否需要捕获异常
sleep需要捕获异常
synchronized和lock的区别防止虚假唤醒
就是用if判断的话,唤醒后线程会从wait之后的代码开始运行,但是不会重新判断if条件,直接继续运行if代码块之后的代码,而如果使用while的话,也会从wait之后的代码运行,但是唤醒后会重新判断循环条件,如果不成立再执行while代码块之后的代码块,成立的话继续wait。
这也就是为什么用while而不用if的原因了,因为线程被唤醒后,执行开始的地方是wait之后
接口lock
实现类:ReentrantLock, ReentrantReadWriteLock.ReadLock, ReentrantReadWriteLock.WriteLock