21、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会退出。