一、概述
juc是java.util.concurrent在并发编程中使用的工具类。
二、进程 & 线程
2.1、进程概述
进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
2.2、线程概述
通常在一个进程中可以包含若干个线程,一个进程中至少有一个线程,不然没有存在的意义。线程可以利用进程所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统多个程序间并发执行的程度。
2.3、举例
(1)使用QQ,查看进程一定有一个QQ.exe的进程,我可以用qq和A文字聊天,和B视频聊天,给C传文件,给D发一段语言,QQ支持录入信息的搜索。
(2)大四的时候写论文,用word写论文,同时用QQ音乐放音乐,同时用QQ聊天,多个进程。
(3)word如没有保存,停电关机,再通电后打开word可以恢复之前未保存的文档,word也会检查你的拼写,两个线程:容灾备份,语法检查
2.4、线程的状态(Thread.State)
public enum State {
NEW, // 新建
RUNNABLE, // 准备就绪
BLOCKED, // 阻塞
WAITING, // 不见不散
TIMED_WAITING, // 过时不候
TERMINATED; // 终结
}
2.5、wait vs sleep
功能都是使当前线程暂停,有什么区别?
wait:放开手去睡,放开手里的锁
sleep:抱着锁去睡,醒了手里还有锁
2.6、并发 vs 并行
并发:同一时刻多个线程在访问同一个资源,多个线程对一个点
例子:小米9今天上午10点,限量抢购、春运抢票、电商秒杀…并行:多项工作一起执行,之后再汇总
例子:泡方便面,电水壶烧水,一边撕调料倒入桶中