当前位置: 首页 > 图灵资讯 > 技术篇> java 中的并发

java 中的并发

来源:图灵教育
时间:2024-03-10 16:21:18

名词解释 并发 vs 并行

并发(concurrent):处理器同时处理多个任务,无论上一个开始执行的任务是否完成,当前的任务都可以开始执行,相反的概念是顺序(sequential)在最后一个开始执行的任务完成后,当前的任务可以开始执行。并行(parallel):多个处理器或多核处理器同时处理多个不同的任务,多个任务执行单元,相反的概念是串行(serial)任务执行单元只有一个。

同步 vs 异步

同步:执行某个操作后,一步一步等待,直到操作结束异步:执行操作后立即离开。如果以后有响应,请通知执行人

阻塞 vs 非阻塞

阻塞:占用某个操作所需的共享资源,只能等待,称为阻塞非阻塞:占用操作所需的共享资源,不等待立即返回,并携带错误信息返回,期待重试临界:公共资源或共享数据

Java 并发机制的底层实现

原子性(Atomicity):一个或一系列操作不能中断。

可见性(Visibility):当一个线程修改一个变量值时,其他线程可以立即知道新值。

顺序性(Ordering):若在线程中观察,所有操作均有序,若在一个线程中观察另一个线程,则所有操作均无序。“串行语义在线程中表现出来”(Within-Thread As-If-Serial Semantics),“指令重排序”现象和“同步延迟工作内存和主内存”现象。

volatile

volatile 变量,用于确保变量的更新操作与其他线程同步。volatile 变量是一种比较 synchronized 同步机制的关键字更轻。

volatilele定义为volatile 之后,它将有两个特点:

1、变量可见性,当一个线程修改一个变量时,另一个线程可以读取修改值。

2、禁止重排序优化指令,编译器重排序,处理器重排序。

synchronized

在同一时刻,一个变量只允许一条线程 lock 操作。

  1. 原理:Monitor 对象,monitorenter, monitorexit 配对。
  2. 实现同步的基础:对于普通的方法,当前的实例对象被锁定。对静态同步方法而言,锁是当前类别 Class 对象。对于同步方法块,锁定 synchronized 括号中配置的对象。
  3. 做了哪些优化?自旋锁、适应性自旋锁、锁消除、锁粗化、偏向锁、轻量级锁等技术,以降低锁操作成本。
CAS(Compare And Swap)
  1. 定义:比较和交换乐观的锁机制
  2. 使用场景:原子包 java.util.concurrent.atomic(锁自旋)
  3. CAS 三大问题:ABA 问题循环时间长,费用大共享变量的原子操作只能保证

Java 并发编程的基础 线程简介 什么是线程

它是操作系统可以进行计算和调度的最小单位。在大多数情况下,它包含在过程中,是过程中的实际操作单位。线程是指过程中一个单一顺序的控制流,一个过程可以并发多个线程,每个线程可以并行执行不同的任务。

为什么要使用多线程?

更多的处理器核心

响应时间更快

编程模型更好

线程优先级 线程的状态

状态名称

说明

NEW

尚未启动的线程状态,即线程创建,尚未调用start方法

RUNNABLE

就绪状态(调用start等待调度)+正在运行

BLOCKED

等待监视器锁时,陷入堵塞状态

WAITING

等待状态的线程正在等待另一个线程执行特定操作(如notify)

TIMED_WAITING

具有指定等待时间的等待状态

TERMINATED

线程完成执行,状态终止

线程状态变化

线程的创建、启动、运行和终止 JAVA线程实现/创建方法

继承Thread类,实现Runnable接口

start 与 run 区别 终止线程 4 种方式

正常运行结束