1、juc简介
在java中,线程部分是重点,juc就是java.util.concurrent工具包的简称。这是一个处理线程的工具包,从jdk1.5开始出现
2、进程与线程
进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程是资源分配的最小单位
线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行。线程是程序执行的最小单位
3、线程的状态
3.1 线程状态枚举类
Thread.State
public enum State {NEW,//新建RUNNABLE,//可执行,准备就绪BLOCKED,//阻塞WAITING,//无条件等待,直到执行TIMED_WAITING,//根据设定时间等待,超过时间就放弃执行TERMINATED;//终结}
3.2 wait/sleep的区别
- sleep是Thread的静态方法,wait是Object的方法,任何对象实例都可以调用
- sleep不会释放锁,它也不需要占用锁。wait会释放锁,但调用它的前提是当前线程占有锁(即代码要在synchronized中)
- 他们都可以被interrupted()方法中断(线程中断方法)
4、并发与并行
并发: 同一时刻多个线程在访问同一个资源,多个线程对一个点
例子:春运抢票 电商秒杀...
并行: 多项工作一起执行,之后再汇总
例子:泡方便面,电水壶烧水,一边撕调料倒入桶中
5、管程(也就是锁)
管程 (monitor) 是保证了同一时刻只有一个进程在管程内活动 , 即管程内定义的操作在同
一时刻只被一个进程调用 ( 由编译器实现 ). 但是这样并不能保证进程以设计的顺序执行
JVM 中同步是基于进入和退出管程 (monitor) 对象实现的,每个对象都会有一个管程
(monitor) 对象,管程 (monitor) 会随着 java 对象一同创建和销毁
执行线程首先要持有管程对象,然后才能执行方法,当方法完成之后会释放管程,方
法在执行时候会持有管程,其他线程无法再获取同一个管程
6、用户线程与守护线程
用户线程 : 平时用到的普通线程 , 自定义线程
守护线程 : 运行在后台 , 是一种特殊的线程 , 比如垃圾回收
当主线程结束后 , 用户线程还在运行 ,JVM 存活
如果没有用户线程 , 都是守护线程 ,JVM 结束