JUC-什么是JUC-01
什么是JUC
java.util.concurrent 工具包
业务:普通的线程代码Thread
Runnable:没有返回值,效率相比Callable相对较低
线程和进程
线程、进程
进程:1个程序,程序的集合
一个进程往往包含多个线程,至少包含1个
java默认两个线程,mainGC
线程:开了一个进程Typora,写字,自动保存(线程负责)
对java:Thread,Runnable,Callable
java无法直接操作线程,通过本地方法
并发,并行
并发(多线程操作同一个资源)
CPU一核,模拟出来多条线程,快速交替
并行(多个人一起行走)
public static void main(String[] args) {
//获取CPU的核数
System.out.println(Runtime.getRuntime().availableProcessors());
}
并发编程的本质:充分利用CPU资源
线程的几个状态
public enum State {
//新生
NEW,
//运行
RUNNABLE,
//阻塞
BLOCKED,
//等待,死死得等
WAITING,
//超时等待
TIMED_WAITING,
//中止
TERMINATED;
}
wait和sleep
- 来自不同的类
wait=>Object
sleep=>Thread
- 关于锁的释放
wait会释放锁,sleep睡觉了,抱着锁睡觉,不会释放
- 使用的范围不同
wait 必须再同步代码块中
sleep 可以在任何地方睡
- 是否需要捕获异常
wait不需要捕获异常
sleep必须要捕获异常
Lock锁
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-euO0B6iM-1604313716057)(/Users/chenxiwen/Library/Application Support/typora-user-images/image-20201102120238752.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-48bVFNEn-1604313716059)(/Users/chenxiwen/Library/Application Support/typora-user-images/image-20201102120158567.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fNdwEBmr-1604313716060)(/Users/chenxiwen/Library/Application Support/typora-user-images/image-20201102145218051.png)]
公平锁:先来后到
非公平锁:可以插队(默认)
Synchronized 和Lock的区别
- Sychronized是内置java关键字,Lock是个java类
- Sychronized无法判断获取锁的状态,Lock可以判断是否获取到了锁
- Sychronized会自动释放锁,Lock会手动释放锁,不释放会导致死锁
- sychronized线程1(获得锁,阻塞),线程2(等待,傻傻得等);Lock锁不一定会等待下去
- sychronized 可重入锁,不可以中断的非公平;Lock,可重入锁,可以判断,非公平(可以设置)
- Sychronized适合锁少量的代码同步问题,Lock锁适合锁大量的同步代码