01、Java并发编程:JUC概述
1.1 JUC简介
JUC是java.util.concurrent
工具包的简称,这是一个处理线程的工具包,JDK1.5开始出现。
1.2 进程和线程的概念
1、 进程;
进程(process)是计算机程序中关于某数据集合的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
在当代面向线程设计的计算机结构中,进程是线程的容器。
程序是指令、数据及其组织形式的描述,进程是程序的实体。
2、 线程;
线程(thread)是操作系统能够进行调度的最小单位。它被包含在进程之中,是进程中的实际运行单位。
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
3、 总结来讲:
- 进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程是资源分配的最小单位。
- 线程:系统分配处理器时间资源的基本单位,或者说进程内独立执行的一个单元执行流。线程是程序执行的最小单位。
1.3 线程的状态
1、 Thread.State
;
public enum State {
NEW, //新建
RUNNABLE, //准备就绪
BLOCKED, //阻塞
WAITING, //等待,一直等
TIMED_WAITING, //等待,逾时不候
TERMINATED; //终结
}
2、 wait/sleep的区别;
- sleep是Thread的静态方法;wait是Object的方法,任何对象实例都能调用wait方法。
- sleep不会释放锁,它也不需要占用锁;wait会释放锁,但调用它的前提是当前线程占有锁(即代码要在synchronized中)。
- 它们都可以被interrupted方法中断。
1.4 并发和并行
并发:两个或多个事件,在同一个时间间隔内交替发生
并行:两个或多个事件,在同一时刻发生
1.5 管程
管程(monitor),是一种同步机制,保证在某一时间段,只有一个线程在访问被保护的数据或代码。
JVM同步是基于进入和退出的,这是使用管程对象来实现的。
1.6 用户线程和守护线程
用户线程:平时用到的普通线程均是用户线程,当在Java程序中创建一个线程,它就被称为用户线程。
如果主线程结束,但是用户线程还存在,此时JVM不会退出。
守护线程:是个服务线程,准确地来说就是服务其他的线程。比如垃圾回收线程。
如果没有用户线程了,只有守护线程,JVM会退出。