【Java 多线程并发】 原理
【Java 多线程并发】 原理Metadatatitle: 【Java 多线程并发】 原理
date: 2023-07-04 16:30
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 【Java 多线程并发】 原理
【Java 多线程并发】 Java内存模型基础知识undefined
undefined
【Java 多线程并发】 volatileundefined
undefined
【Java 多线程并发】 synchronizedundefined
undefined
【Java 多线程并发】 CAS(Compare And Swap)undefined
undefined
【Java 多线程并发】 AQS(Abstract Queued Synchronizer)undefined
undefined
【Java ...
【Java 多线程并发】 基础
【Java 多线程并发】 基础Metadatatitle: 【Java 多线程并发】 基础
date: 2023-07-04 16:27
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 【Java 多线程并发】 基础
【Java 多线程并发】 进程与线程基本概念undefined
undefined
【Java 多线程并发】 Java多线程入门类和接口undefined
undefined
【Java 多线程并发】 线程组和线程优先级undefined
undefined
【Java 多线程并发】 Java线程间的通信undefined
【Java 多线程并发】 锁undefined
undefined
【Java 多线程并发】 线程安全和线程不安全的定义以及实现线程安全的方法有哪些undefined
undefined ...
【Java 多线程并发】 ThreadLocal
【Java 多线程并发】 ThreadLocalMetadatatitle: 【Java 多线程并发】 ThreadLocal
date: 2023-07-04 15:58
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 【Java 多线程并发】 ThreadLocal
概述ThreadLocal
Thread的局部变量提供线程内的局部变量,在多线程环境下访问时能保证各个线程内的ThreadLocal变量各自独立
应用场景
每个线程需要一个独享的对象
当前用户信息需要被线程内所有方法共享
ThreadLocal的作用
让某个需要用到的对象在线程间隔离(每个线程都有自己的独立的对象)
在任何方法中都可以轻松获取到该对象
使用ThreadLocal带来的好处
达到线程安全
不需要加锁,提高执行效率
更高效地利用内存 ...
【Java 多线程并发】 fail-fast(快速失败)机制
【Java 多线程并发】 fail-fast(快速失败)机制Metadatatitle: 【Java 多线程并发】 fail-fast(快速失败)机制
date: 2023-07-04 15:44
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 【Java 多线程并发】 fail-fast(快速失败)机制
概述fail-fast 机制,即快速失败机制,是java集合(Collection)中的一种错误检测机制。
概述
ConcurrentModificationException都是在操作Iterator时抛出的异常。
当多个线程对同一个集合进行操作的时候,某线程访问集合的过程中,该集合的内容被其他线程所改变(即其它线程通过add、remove、clear等方法,改变了modCount的值);这时,就会抛出Concurr ...
【Java 多线程并发】 AQS(Abstract Queued Synchronizer)
【Java 多线程并发】 AQS(Abstract Queued Synchronizer)Metadatatitle: 【Java 多线程并发】 AQS(Abstract Queued Synchronizer)
date: 2023-07-04 10:53
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java
categories:
- Java
keywords:
- Java
description: 【Java 多线程并发】 AQS(Abstract Queued Synchronizer)
概述AQS(AbstractQueuedSynchronizer)是Java中用于实现同步器的抽象基类。它提供了一种基于FIFO队列的线程协作机制,可以用来构建各种类型的同步器,如锁、信号量、倒计时门栓等。
提供了两种模式的同步器:独占模式和共享模式。
核心思想
使用一个共享的volatile int状态变量来表示同步状态
通过CAS操作来实现 ...
【Java 多线程并发】 AQS(Abstract Queued Synchronizer)
【Java 多线程并发】 AQS(Abstract Queued Synchronizer)Metadatatitle: 【Java 多线程并发】 AQS(Abstract Queued Synchronizer)
date: 2023-07-04 08:31
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 【Java 多线程并发】 AQS(Abstract Queued Synchronizer)
【Java 多线程并发】 AQS(Abstract Queued Synchronizer)Java 并发包(JUC)中提供了很多并发工具,这其中,很多我们耳熟能详的并发工具,譬如 ReentrangLock、Semaphore,它们的实现都用到了一个共同的基类 –AbstractQueuedSynchronizer, 简称 ...
【Java 多线程并发】 CAS(Compare And Swap)
【Java 多线程并发】 CAS(Compare And Swap)Metadatatitle: 【Java 多线程并发】 CAS(Compare And Swap)
date: 2023-07-03 23:52
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 【Java 多线程并发】 CAS(Compare And Swap)
概述CAS 的全称为 Compare And Swap,直译就是比较交换。是一条 CPU 的原子指令其作用是让 CPU 先进行比较两个值是否相等,然后原子地更新某个位置的值其实现方式是基于硬件平台的汇编指令
它就是 CPU 的一条原子指令。过程是这样:它包含 3 个参数
内存位置(V)、
预期原值(E)
新值 (N)。
V 表示要更新变量的值,E 表示预期值,N 表示新值。仅当 V 值等于 ...
【Java 多线程并发】 synchronized
【Java 多线程并发】 synchronizedMetadatatitle: 【Java 多线程并发】 synchronized
date: 2023-07-03 22:31
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 【Java 多线程并发】 synchronized
概述synchronized是利用锁的机制来实现同步的。
原子性
可见性
有序性
可重入性
synchronized有两种形式上锁,一个是对方法上锁,一个是构造同步代码块。底层原理相同在进入同步代码之前先获取锁,获取到锁之后锁的计数器+1,同步代码执行完锁的计数器-1,如果获取失败就阻塞式等待锁的释放。同步块识别方式不同一个是通过方法flags标志,一个是monitorenter和monitorexit指令操作。
Mark Word
moni ...
【Java 多线程并发】 线程安全和线程不安全的定义以及实现线程安全的方法有哪些
【Java 多线程并发】 线程安全和线程不安全的定义以及实现线程安全的方法有哪些Metadatatitle: 【Java 多线程并发】 线程安全和线程不安全的定义以及实现线程安全的方法有哪些
date: 2023-07-03 22:18
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 【Java 多线程并发】 线程安全和线程不安全的定义以及实现线程安全的方法有哪些
概述将Java语言中各种操作共享的数据分为以下5类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。
不可变
绝对线程安全
相对线程安全
线程兼容
线程对立
互斥同步
是实现同步的一种手段,临界区(Critical Section)、互斥量(Mutex)和信号量(Semaphore)都是主要的互斥实现方式。
线程执行互斥代码的过程
获得互斥锁
清 ...
【Java 多线程并发】 LockSupport
【Java 多线程并发】 LockSupportMetadatatitle: 【Java 多线程并发】 LockSupport
date: 2023-07-03 15:59
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java
categories:
- Java
keywords:
- Java
description: 【Java 多线程并发】 LockSupport
概述LockSupport是concurrent包中的一个线程阻塞工具类,所有的方法都是静态方法LockSupport用来创建锁和其他同步类的基本线程阻塞原语。
当调用 LockSupport.park()时,表示当前线程将会等待,直至获得许可,
当调用 LockSupport.unpark()时,必须把等待获得许可的线程作为参数进行传递,好让此线程继续运行。
设计思想
**设置一个许可(permit)**,这个permit就相当于一个开关,0代表关闭,1代表打开。调用一次 ...