目录
什么是JUC:
JUC是java.util.concurrent包的缩写 JUC指的是Java的并发工具包
就是java.util工具包、包、分类
业务:普通的线程代码 Thread
Runnable 没有返回值 效率相比于 callable 相对较低
Lock锁
什么叫进程?
:一个程序的集合 执行起来就是一个个进程
什么是线程
一个进程包含多个线程 一个进程至少包含一个线程
java默认有几个线程 ? 2个 一个是main线程 一个是 GC线程
java真的能开启线程吗? 无法开启 调用的是本地的方法 底层的C++ Java无法直接操作硬件
理解并发和并行
并发编程的本质:充分利用cpu资源
线程 几种状态
(new )新生 (runnable)运行 ( bocked) 阻塞 (waiting) 等待 (timed_waiting) 超时等待 (terminated) 终止
wait 和sleep的区别
Lock锁
公平锁 可以先来后到
非公平锁 可以插队
Lock 和Synchronized 区别
1.Synchronized 是java的关键字 Lock是Java类
2. S无法判断锁的状态 L可以判断是否获取到锁
3 S会自动释放锁 L需要手动释放锁 不释放会造成死锁
4 S 线程1 阻塞 2就会一直等待 L不一定会等待下去
5 S 可重入锁 不可以中断 是非公平锁 L是 可重入锁 非公平(可以设置)
6 S是少量代码 L适用于大量代码
锁是什么 如何判断锁的是谁 ?
生产者消费者 两个线程不会 四个、多个线程 会造成虚假唤醒
线程可以唤醒 而不会被通知 即虚假唤醒 等待应该出现在循环中
if判断只会判断一次 唤醒时会造成虚假唤醒
if 改为 while判断
Condition 实现精准唤醒
为什么要精准唤醒 lockA线程处理完 无法确保是B线程 需要Condition 去实现精准唤醒