一:JUC概述
JUC就是java.util.concurrent工具包的简称。这是一个处理线程的工具包,JDK1.5的时候开始开始出现。
二:进程与线程
-
进程:是计算机中程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
- 总结:指在系统中正在运行的一个程序;程序一旦运行就是进程;进程—资源分配的最小单位。
-
线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。(一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务)
- 总结:系统分配处理器时间资源的基本单位,或者说进程之内独立运行的一个单元执行流。线程—程序执行的最小单位。
例如:我们打开电脑了电脑上的火绒安全软件,这时系统就为其开启了一个进程,然后我们再在软件里面使用它的清理垃圾的功能,其就属于是一个线程。
三:线程的状态有哪些
- 在线程状态枚举类Thread.State类中定义了下面几种状态
- NEW(新建)
- RUNNABLE(准备就绪)
- BLOCKED(阻塞)
- WAITING (不见不散)即使在约定的时间你没来,它也会继续等待
- TIMED_WAITING (过时不候)约定的时间你没来,它会直接离开
- TERMINATED(终结)
四:wait/sleep 的区别
-
sleep是Thread类的静态方法,wait是Object类的方法,任何对象实例都可以调用。
-
sleep不会释放锁,它也不需要占用锁。wait会释放锁,但调用它的前提是当前线程占有锁(即代码要在synchronized中)。
-
它们都可以被interrupted方法中断。(共同点)
-
它们都是:在哪里睡,在哪里醒。 (共同点)
五:并发与并行
串行模式:
串行表示所有任务都一一按先后顺序进行。串行是一次只能取得一个任务,并执行这个任务
并行模式
并行意味着可以同时取得多个任务,并同时去执行所取得的这些任务
注意:并行不同于并发
并发:多个程序可以同时运行的现象,更细化的是多进程可以同时运行或者多指
令可 以同时运行。
例:
并行:同一时刻多个线程在访问同一个资源,多个线程对同一个点。春运抢票
并发:多项工作一起执行,然后再汇总。我想吃泡面,水壶烧水、撕开调料包…同时执行
六:管程
-
即为Monitor 监视器。
-
就是我们通常说的锁。
-
是一种同步机制,保证同一个时间,只有一个线程访问被保护数据或者代码(只有一个线程能去访问这个数据或者执行这个代码)
-
jvm同步基于进入线程(需要加锁)和退出线程(需要解锁),这是使用管程对象实现的,每个对象都会有一个monitor管程对象,它是随着java对象一起创建和销毁(管程对象就是对临界区进行处理,进入线程的时候加锁,退出线程的时候解锁)。
-
如果要执行线程操作,首先要持有管程对象,然后才可以去执行方法,当你在执行方法的过程中别的线程就不能获取你的这同一个管程对象,只有在方法完成之后再释放管程对象。
七:用户线程和守护线程
用户线程:
我们平常自定义的那些线程几乎都是用户线程,比如Thread之类的。
守护线程:
在后台中一种特殊的线程,比如垃圾回收,在后台默默进行。
1:主线程如果结束了但是用户线程还在运行,jvm存活
2:没有用户线程了,都是守护线程,jvm结束
对应1,虽然主线程结束了但是该程序还没有结束。
对应2,没有用户线程了,都是守护线程,jvm结束