JUC学习笔记
1.获取CPU核数
2.并发编程的本质:充分利用CPU 资源,线程6种状态 --1.新生 2. 运行 3.阻塞 4.等待 ,死死的等待 5 .超时等待 6.终止
3. wait / sleep 区别
wait 会释放锁,
sleep 睡觉了,抱着锁睡觉,不会释放 !
<1>、使用的范围是不同的
wait --》wait必须在同步代码块中
sleep--》 可以再任何地方睡
<2>、是否需要捕获异常
wait 不需要捕获异常
sleep必须要捕获异常
4. lambda表达式 (参数)-> {代码} || ()->{}
// Lock三部曲
// 1、new ReentrantLock();
// 2、Lock.Lock();// 加锁
// 3、finally=>Lock.unlock(); // 解锁
Synchronized 和 Lock 区别
1、Synchronized 内置的lava关键字,Lock 是一个ava类
2、Synchronized 无法判断获取锁的状态,Lock 可以判断是否获取到了锁
3、Synchronized 会自动释放锁,lock 必须要手动释放锁 !如果不释放锁,死锁
4、Synchronized 线程 1(获得锁,阻塞 )、线程2(等待,傻傻的等 ) ; Lock锁就不一定会等待下去;
5、Synchronized 可重入锁,不可以中断的,非公平;Lock ,可重入锁,可以判断锁,非公平(可以自己设置)
6、Synchronized 适合锁少量的代码同步问题,Lock 适合锁大量的同步代码!
Condition 精准的通知和唤醒线程