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 精准的通知和唤醒线程

 

posted @ 2023-07-10 10:33  黑狗已醒  阅读(3)  评论(0编辑  收藏  举报