并发编程
文章平均质量分 93
荒诞离场?
切莫玩物丧志
展开
-
Semaphore信号量源码详解
Semaphore信号量底层依赖于AQS实现的信号量同步工具,可以用来做限流操作;我们可以通过Semaphore来定义信号量的资源池,通过acquire方法来获取资源,使用完成资源后,通过调用release方法释放资源池资源使用实例public class SemaphoreTest { public static void main(String[] args) { Semaphore semaphore = new Semaphore(2); ..原创 2021-01-03 18:38:45 · 376 阅读 · 0 评论 -
AQS详解
compareAndSetState(0, 1)原创 2020-04-19 18:22:09 · 239 阅读 · 0 评论 -
Java并发学习(一)
java内存模型1 基本概念程序:代码,完成某一件任务,代码序列(静态的概念)进程:程序在某些数据上的一次运行(动态的概念)线程:一个进程中包含一个或多个线程(占有资源的独立单元)2 JVM与线程jvm什么时候启动? 类被调用 JVM线程 --> 其他线程(main)线程在jvm中3 JVM内存区域 (按照JMM规范划分的最终的结果)方法区:...原创 2019-07-30 12:27:59 · 994 阅读 · 0 评论 -
Java并发学习(二)之 Synchronized
上一个文章中我们讲到了并发的三个特性,现在来看一看一个中要的特性 Synchronized一 概念是利用锁机制来同步的。锁机制有两个特性 互斥性和可见性互斥性 : 同一时间只允许一个线程持有某个对象,通过这种特性来实现多线程同的协调机制,这样同一时间只有一个线程对需要同步的代码块进行访问。互斥性我们往往也成为原子性可见性: 必须保证线程在释放锁之前,对共享变量所做的修改,对于后来获...原创 2019-07-30 19:03:02 · 147 阅读 · 0 评论 -
Java并发学习(三)之 Volatile
上一个文章讲过了Synchronized之后,现在来了解一下Volatile1 认识Volatile关键字程序举例用一个线程读数据,一个线程改数据存在数据的不一致性2 机器硬件CPU与JMM(1)CPU Chache模型(2)CPU 缓存一致性问题解决方案 1)总线加锁(粒度太大 效率较慢) 2)MESI协议 ...原创 2019-07-31 10:42:06 · 133 阅读 · 0 评论 -
Java并发学习(四)之CAS和AQS
由于在多线程中为了保证数据的原子性使用了Synchronized,为了保证有序性和可见性使用Volatile。 在jdk1.5引入了JUC(java.util .concurrent工具包)。CAS(1)概念CAS(Compare And Swap),即比较并交换。是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数——内存位置(V)、预期原值(A)和新值(B...原创 2019-08-01 12:08:56 · 250 阅读 · 0 评论 -
并发框架和集合
CountDownLatchCountDownLatch是一个非常实用的多线程控制工具类。下面写了一个小例子public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { CountDownLatch countDownL...原创 2019-08-12 16:16:08 · 361 阅读 · 0 评论