1. JUC简介
JUC即java.util.concurrent工具包的简称.这是一个处理线程的工具包,从JDK1.5开始出现
2. 进程和线程
2.1 进程与线程的概念
进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程.进程是资源分配的最小单位.
线程:系统分配处理器时间资源的基本单元,或者说进程之间独立执行的一个单元执行流.线程是程序执行的最小单位
线程的状态:a.new(新建)
b.runnable(准备就绪)
c.blocked(阻塞)
d.waiting(等待 不见不散)
e.timed_waiting(等待 过时不候)
f.terminated(终结)
2.2 wait和sleep的区别
sleep是Thread的静态方法,wait是Object的方法,任何对象实例都能调用.
sleep不会释放锁,也不需要占用锁.wait会释放锁,但调用它的前提是当前线程占有锁(即代码需要在synchronized中)这两个都能被interupted方法中断
2.3 并行和并发
并行:多项工作一起执行,之后再进行汇总 例子:泡方便面,一边用水壶烧水,一边撕开调料包倒入桶中
并发:同一时刻多个线程在访问同一资源,多个线程对一个点 例子:春运抢票 电商秒杀
2.4 管程
Monitor监视器(操作系统),也就是Java中常说的锁.
管程是一种同步机制,保证在同一个时间,只用一个线程访问被保护数据或者代码
2.5 用户线程和守护线程
用户线程:用户自定义的线程
守护线程:系统自带,代码运行时在后台运行发挥功能的线程 例如GC垃圾回收
主线程结束,用户线程仍在运行,JVM存活
无用户线程,都是守护线程时,JVM结束