前提 最近有点懒散,没什么比较有深度的产出。刚好想重新研读一下JUC线程池的源码实现,在此之前先深入了解一下Java中的线程实现,包括线程的生命周期、状态切换以及线程的上下文切换等等。编写本文的时候,使用的JDK版本是11。 Java线程的实现 在JDK1.2之后,Java线程模型已经确定了基于操作 ...
分类:
编程语言 时间:
2020-08-05 14:25:11
阅读次数:
77
CAS 也叫自旋锁,用来保证操作的一致性,比如用2个线程同时对一个变量累加1000,000次,得到的结果可能比2000,000少: package juc.test.cas; import org.junit.Test; import java.util.concurrent.CountDownLa ...
分类:
编程语言 时间:
2020-08-02 12:45:13
阅读次数:
98
一、AQS概述 AQS全名AbstractQueuedSynchronizer,意为抽象队列同步器,JUC(java.util.concurrent包)下面的Lock和其他一些并发工具类都是基于它来实现的。AQS维护了一个volatile的state和一个CLH(FIFO)双向队列。 二、分析 st ...
分类:
编程语言 时间:
2020-07-30 14:22:04
阅读次数:
63
一、前言 了解CAS,首先要清楚JUC,那么什么是JUC呢?JUC就是java.util.concurrent包的简称。它有核心就是CAS与AQS。CAS是java.util.concurrent.atomic包的基础,如AtomicInteger、AtomicBoolean、AtomicLong等 ...
分类:
编程语言 时间:
2020-07-28 14:07:07
阅读次数:
79
CountDownLatch CountDownLatch闭锁是在java1.5被引入,存在于java.util.cucurrent包下。 CountDownLatch是一个同步辅助类,让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒。CountDownLatch是通过一个计数器来实现的,计数器 ...
分类:
其他好文 时间:
2020-07-24 09:48:14
阅读次数:
77
前提 并发编程大师Doug Lea在编写JUC(java.util.concurrent)包的时候引入了java.util.concurrent.locks.AbstractQueuedSynchronizer,其实是Abstract Queued Synchronizer,也就是"基于队列实现的抽 ...
分类:
其他好文 时间:
2020-07-24 09:21:44
阅读次数:
94
公平和非公平锁 公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队,先来后到。 非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁在高并发的情况下,有可能会造成优先级反转或者饥饿现象。 两者区别: 并发包中ReentrantLock的创建可以指定 ...
分类:
其他好文 时间:
2020-07-21 09:46:12
阅读次数:
82
同步框架AbstractQueuedSynchronizer Java并发编程核心在于java.concurrent.util包 而juc当中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列、条件队列、独占获取、共享获取等,而这个行为的抽象就是基于AbstractQueuedSynchron ...
分类:
其他好文 时间:
2020-07-18 19:45:38
阅读次数:
71
一、Collections工具类 Collections 工具类常用方法: 排序 查找,替换 同步控制(不推荐,需要线程安全的集合类型时请考虑使用 JUC 包下的并发集合) 1. 排序 void reverse(List list)//反转 void shuffle(List list)//随机排序 ...
分类:
其他好文 时间:
2020-07-17 09:24:50
阅读次数:
78
CAS 一. 简介 利用锁保证线程安全会造成CPU资源浪费(例如线程调度,线程上下文切换等),考虑到锁带来的开销,引入了无锁算法CAS(Compare And Swpa,比较交换),成为整个JUC体系最核心、最基础理论。 CAS一定要volatile变量配合,这样才能保证每次拿到的变量是主内存中最新 ...
分类:
其他好文 时间:
2020-07-13 20:03:37
阅读次数:
48