1. JUC概述
1.1 什么是JUC
JUC时java.util.concurrent工具包的简称。这是一个处理线程的工具包,JDK1.5开始出现的。
1.2 进程和线程的概念
1.2.1 进程与线程
打开一个软件,就开启了一个进程,一个进程会包括很多个线程,线程是操作系统运行的最小资源单位。
- 打开360软件(开启一个进程)
- 木马查杀 (线程1)
- 清理垃圾 (线程2)
进程:指在系统中正在运行的一个应用程序;程序一旦运行就是一个进程;进程是资源分配的最小单位;
线程:系统分配处理器时间资源的基本单元。线程是程序执行的最小单位。
CPU是按照线程分配时间片的。在大多数现代操作系统中,调度器是基于线程而不是进程来分配时间片的。
1.2.2 线程的状态
Thread.State:
- NEW
- RUNNABLE
- BLOCKED
- WAITING
- TIMED_WAITING
- TERMINATED
1.2.3 wait和sleep
- sleep是Thread的静态方法,wait是Object的方法,任何对象实例都能调用
- sleep不会释放锁,它也不需要占用锁。wait会释放锁,但调用它的前提是当前线程占有锁。
- 他们都可以被interrupted方法中断
1.2.4 并发和并行
- 并发:单核CPU
- 并行:4核CPU
1.2.5 管程
Monitor,监视器。是一种同步机制,保证同一个时间,只有一个线程对被保护的数据或者代码访问。
1.2.6 用户线程和守护线程
- 用户线程:自定义线程
- 守护线程:比如垃圾回收
主线程结束了,用户线程还在运行,jvm存活
没有用户线程了,都是守护线程,jvm结束