Java 并发编程
文章平均质量分 94
A.iguodala
共同进步,加油!
展开
-
Java内存模型
一、JMM概述JMM 即 Java Memory Model,它定义了**主存(共享内存)、工作内存(线程私有)**抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、 CPU 指令优化等。JMM 具体体现在三个方面:原子性 - 保证指令不会受到线程上下文切换的影响可见性 - 保证指令不会受 cpu 缓存的影响有序性 - 保证指令不会受 cpu 指令并行优化的影响1. happens-before 简介JDK1.5 开始,Java使用JSR-133内存模型,该模型使用happens-be原创 2021-06-10 16:19:39 · 113 阅读 · 0 评论 -
Java 深入理解ThreadLocal
文章目录一、ThreadLocal概述二、原理解析1. set( ) 方法2. get() 和 remove()三、InheritableThreadLocal 概述四、原理解析一、ThreadLocal概述ThreadLocal是JDK包提供的,它提供了线程本地变量,也就是如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地副本。当多个线程操作这个变量时,实际操作的是自己本地内存里面的变量,从而避免了线程安全问题举例package lockTest;i原创 2021-04-23 19:05:36 · 796 阅读 · 0 评论 -
Java 中的并发工具类
文章目录一、等待多线程完成的CountDownLatch二、同步屏障CyclicBarrierCountDownLatch 和 CyclicBarrier 的区别三、控制并发线程数的Semaphore一、等待多线程完成的CountDownLatchCountDownLatch 允许一个或多个线程等待其他线程完成操作,类似于 join()CountDownLatch 的构造函数接受一个int类型参数,表示计数器,调用CountDownLatch的 countDown() 方法会使计数器 减一,Count原创 2021-04-23 13:16:00 · 183 阅读 · 0 评论 -
重入锁 ReentrantLock 和 读写锁 ReentrantReadWriteLock
文章目录一、重入锁 ReentrantLock1. 实现重进入2. 公平和非公平获取锁的区别二、读写锁 ReentrantReadWriteLock一、重入锁 ReentrantLockReentrantLock 是AQS的经典应用,对AQS不了解的可以看 此博客public class ReentrantLock implements Lock, java.io.Serializable { private final Sync sync; abstract static cla原创 2021-04-21 20:56:18 · 593 阅读 · 2 评论 -
Java中的锁(深入理解AQS)
一、队列同步器 AbstractQueuedSynchronizer队列同步器 AbstractQueuedSynchronizer,是用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO 队列来完成资源获取线程的排队工作。1. AQS的使用AQS的设计是基于模板方法模式的,也就是说,使用者需要继承同步器并重写指定的方法,随后将同步器组合在自定义同步组件的实现中,并调用同步器提供的模板方法,而这些模板方法将会调用使用者重写的方法...原创 2021-04-19 19:03:14 · 1527 阅读 · 9 评论 -
Java 深入理解线程池
文章目录一、Java 中的线程池1. 线程池状态2. 线程池主要属性参数3. 线程池的实现原理4. 线程池的监控二、手写线程池1. 实现阻塞队列2. 实现线程池3. 测试4. 拒绝策略4.1 带超时的添加任务4.2 拒绝策略(策略模式)4.3 测试利用带超时时间的拒绝策略5. 完整代码一、Java 中的线程池1. 线程池状态ThreadPoolExecutor使用int的高3位来表示线程池状态,低29位表示线程数量 // runState is stored in the high-order原创 2021-04-13 23:58:46 · 1903 阅读 · 9 评论 -
Java 并发编程_无锁并发
文章目录1. 无锁解决线程安全问题2. CAS与volatile3. 原子整数4. 原子引用4.1 ABA问题4.2 AtomicStampedReference4.3 AtomicMarkableReference1. 无锁解决线程安全问题举例:package top.nnzi.concurrent.chapter02;import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.Ato原创 2021-04-10 16:12:49 · 1630 阅读 · 3 评论 -
Java线程的六种状态以及状态间的转换
文章目录1. 线程状态2. 线程中的状态转换1. 情况一:NEW –> RUNNABLE2. 情况二: RUNNABLE <–> WAITING3. 情况三:RUNNABLE <–> WAITING4. 情况四: RUNNABLE <–> WAITING5. 情况五: RUNNABLE <–> TIMED_WAITING6. 情况六:RUNNABLE <–> TIMED_WAITING7. 情况七:RUNNABLE <–> TIM原创 2021-04-05 16:16:12 · 797 阅读 · 0 评论 -
Java 多线程常用方法以及关联设计模式
文章目录1. start( )和 run( )1.1 run( )1.2 start( )2. sleep( ) 和 yield( )2.1 sleep( ): 使线程阻塞2.2 yield( ):让出当前线程2.3 setPriority( ):设置线程优先级3. join( )4. interrupt( ):打断线程4.1 两阶段终止模式5. setDaemon( ):设置守护线程1. start( )和 run( )测试代码:/** * 多线程常用方法 */public class Usu原创 2021-04-02 21:25:45 · 615 阅读 · 0 评论 -
Java 并发编程_详解 synchronized 和 volatile
文章目录1. synchronized 的应用1.1 基础知识1.2 synchronized 语法2. Monitor概念1. synchronized 的应用1.1 基础知识临界区 Critical Section一个程序运行多个线程本身是没有问题的问题出在多个线程访问共享资源多个线程读共享资源其实也没有问题在多个线程对共享资源读写操作时发生指令交错,就会出现问题一段代码块内如果存在对共享资源的多线程读写操作,称这段代码块为临界区例如,下面代码中的临界区static int原创 2021-04-04 17:00:30 · 543 阅读 · 1 评论