JUC并发编程1

1.JUC是什么?

JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包,JDK 1.5开始出现的。

2.进程和线程

  1. 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;

  2. 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线
    Java默认有两个线程 1.main 2.GC

3.并发和并行

并发:不同的代码块交替执行
并行:不同的代码块同时执行
获取CPU核数
Runtime.getRuntime().availableProcessors();

4.线程状态

JUC并发编程1
wait和sleep的区别
1.来自不同的类
wait =>object
sleep=>Thread
2.关于线程的释放
wait会释放
3.适用范围
wait必须在同步代码块中
4.是否需要捕获异常
sleep需要捕获异常

synchronized和lock的区别
JUC并发编程1防止虚假唤醒
就是用if判断的话,唤醒后线程会从wait之后的代码开始运行,但是不会重新判断if条件,直接继续运行if代码块之后的代码,而如果使用while的话,也会从wait之后的代码运行,但是唤醒后会重新判断循环条件,如果不成立再执行while代码块之后的代码块,成立的话继续wait。

这也就是为什么用while而不用if的原因了,因为线程被唤醒后,执行开始的地方是wait之后

接口lock
实现类:ReentrantLock, ReentrantReadWriteLock.ReadLock, ReentrantReadWriteLock.WriteLock