本篇内容包括:Java 并发工具类的介绍、使用方式与 Demo,包括了 CountDownLatch(线程计数器)、CyclicBarrier(回环栅栏)、Semaphore(信号量) 以及 Exchanger(交换器)等内容!一、CountDownLatch(线程计数器)CountDownLatch 线程计数器,俗称闭锁,作用是类似加强版的 Join,是让 ......
325
0
0
2022-12-20
本篇内容包括:抽象队列同步器(抽象队列同步器、同步状态的处理)以及FIFO队列的设计——AQS灵魂(Node 节点的设计、共享资源的竞争、共享资源的释放)等内容。一、抽象队列同步器1、抽象队列同步器AQS,即 AbstractQueuedSynchronizer,抽象队列同步器,它是是一个集同步状态管理、线程阻塞、线程释放及队列管理功能与一身的同步框架。其核 ......
326
0
0
2022-12-20
本篇内容包括:为什么使用 Lock、Lock 锁注意事项、ReentrantLock 和 synchronized 对比、ReentrantLock (加锁、解锁、公平锁与非公平锁、ReentrantLock 如何实现可重入)等内容。一、Lock 锁1、为什么使用 Locksynchronized 线程等待时间过长,获取锁的线程由于要等待IO或者其他原因(比 ......
304
0
0
2022-12-20
本篇内容包括:Synchronized 关键字简介、synchronized 的修饰对象、对象的内存布局(64位)、Synchronized 锁升级过程等内容。一、Synchronized 关键字简介Synchronize 翻译成中文:同步,使同步。synchronized:已同步。synchronized 能够保证同一时刻最多只有一个线程执行该段代码,以达 ......
310
0
0
2022-12-20
本篇内容包括:volatile 关键字简介、volatile 保证可见性(包括:关乎不可见性问题描述、JMM内存模型和不可见性的解决方案)以及 volatile 其他特性(包括:volatile 不保证原子性、volatile 原子性的保证操作、volatile 禁止指令重排、内存屏障和 happens-before 规则)一、volatile 关键字简介J ......
316
0
0
2022-12-20
本篇内容包括:ThreadLocal 简介、ThreadLocal 的使用(创建、方法、Demo)、ThreadLocal 原理、ThreadLocal 内存泄漏问题&使用时的注意事项以及其他 Thread 相关知识点(关于 ThreadLocal和Synchronized的区别、关于 ThreadLocalMap 中的 Hash 冲突处理)等内容。 ......
292
0
0
2022-12-20
本篇内容包括:悲观锁与乐观锁的概述、CAS(Compare And Swap)比较并交换的介绍、非阻塞算法与ABA问题,以及对 Java 中 CAS 的实现解读(AtomicInteger 对 CAS 的实现,Unsafe 类简介)。一、悲观锁与乐观锁锁的一种宏观分类方式是悲观锁和乐观锁。悲观锁与乐观锁并不是特指某个锁(Java 中没有哪个 Lock 实现类 ......
311
0
0
2022-12-20
本篇内容包括:线程池概述、Java 线程池的几个重要参数、线程池的执行流程、拒绝策略以及线程池状态、Java 线程池的使用(常用的线程池、Executor 框架、ThreadPoolExecutor创建线程池、Executor 框架的继承关系)等内容。一、线程池概述池化技术现在已经屡见不鲜了,线程池、数据库连接池、Http 连接池等等都是对这个思想的应用。池 ......
338
0
0
2022-12-20
本篇内容包括:Java线程的生命周期(新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead))、Java 线程实现/创建的4种方式、终止 Java 线程4 种方式、线程的基本方法以及对守护线程的介绍。一、Java线程的生命周期当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在 ......
298
0
0
2022-12-20
本篇内容包括:进程与线程&并行与并发的基本概念,Java内存模型中的内存划分、内存交互、内存交互,以及JMM的相关概念,包括了 CPU 和缓存一致性、重排序、处理器重排序与内存屏障指令、JMM 的重排序屏障、数据依赖性、as-if-serial 语句、happens-before 规则,还有JMM三大特征(原子性、可见性、有序性)。一、基本概念1、进 ......
280
0
0
2022-12-20
volatile是Java提供的一种轻量级的同步机制。Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量,相比于synchronized(synchronized通常称为重量级锁),volatile更轻量级,因为它不会引起线程上下文的切换和调度。但是volatile 变量的同步性较差(有时它更简单并且开销更低),而且其使用也更容 ......
398
0
0
2022-12-19
synchronized是Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。本文给大家介绍java中的用法。一、为什么要使用synchronized在并发编程中存在线程安全问题,主要原因有:1.存在共享数据2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可 ......
450
0
0
2022-12-19
在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。那么它们产生的原因和在Java中解决的办法又是什么呢?一、内存模型的相关概念​ 计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而 ......
390
0
0
2022-12-19
线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。一、线程的分类我们知道计算机可以分为硬件和软件两大块,硬件是基础,软件提供实现不同功能的手段;而软件又可以分为操作系统和应用程序,操作系统专注于对硬件的交互管 ......
310
0
0
2022-12-19
一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。 多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。一、进程1、什么是进程进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位 ......
292
0
0
2022-12-19