随笔分类 - 并发案例
为什么AtomicInteger在CAS 在这个过程中不会被其他线程打断
摘要:AtomicInteger中的CAS操作是基于硬件级别的原子操作,因为它是由CPU硬件直接支持的操作。在CAS操作期间,对于同一内存地址的多个线程的访问会被串行化,即同时只有一个线程能够成功执行CAS操作。当一个线程请求执行CAS操作时,如果当前内存地址的值与期望的值相同,那么该线程就成功执行了CA
阅读全文
指令重排案例
摘要:package thread; public class ResortDemo { static int i = 0; static boolean f = false; public static void main(String[] args) { new Thread(() -> { try
阅读全文
15.锁绑定多个条件Condition
摘要:1.代码 package com.mydemo; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Reentr
阅读全文
14.线程通信之生产者消费者传统版(lock, await, signal)
摘要:1.代码 package com.mydemo; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Reentr
阅读全文
13.BlockingQueue
摘要:1.BlockingQueue的核心方法 2.阻塞超时放弃演示 package com.mydemo; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import
阅读全文
12.Semaphore
摘要:1.定义 信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制 正常的锁(concurrency.locks或synchronized锁)在任何时刻都只允许一个任务访问一项资源,而 Semaphore允许n个任务同时访问这个资源。 模拟一个抢车位的场景,假设一共有6个
阅读全文
11.CyclicBarrier
摘要:1.定义 CyclicBarrier的字面意思就是可循环(Cyclic)使用的屏障(Barrier)。它要求做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBarrier的await
阅读全文
10.CountDownLatch
摘要:1.定义 让一线程阻塞直到另一些线程完成一系列操作才被唤醒。 CountDownLatch主要有两个方法(await(),countDown())。 当一个或多个线程调用await()时,调用线程会被阻塞。其它线程调用countDown()会将计数器减1(调用countDown方法的线程不会阻塞),
阅读全文
9.java锁之读写锁代码验证
摘要:1.实现一个读写缓存的操作,假设开始没有加锁的时候,会出现什么情况 import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; class MyCache { private volati
阅读全文
8.java锁之自旋锁代码验证
摘要:package com.mydemo; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import static java.lang.Thread.currentTh
阅读全文
7.java锁之可重入锁和递归锁代码验证 Synchronized以及ReentrantLock可重入锁演示程序
摘要:1.可重入锁(也叫做递归锁) 指的是同一线程外层函数获得锁之后,内层递归函数仍然能获取该锁的代码,在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁。 也即是说,线程可以进入任何一个它已经拥有的锁所同步着的代码块。 ReentrantLock/synchronized就是一个典型的可重入
阅读全文
5.集合类不安全之Set
摘要:package com.mydemo; import java.util.Collections; import java.util.HashSet; import java.util.Set; import java.util.UUID; import java.util.concurrent.C
阅读全文
6.集合类不安全之Map
摘要:package com.mydemo; import java.util.*; import java.util.concurrent.ConcurrentHashMap; public class MapNotSafeDemo { public static void main(String[]
阅读全文
4.集合类不安全之并发修改异常
摘要:1.list不安全 package com.mydemo; import java.util.ArrayList; import java.util.UUID; import java.util.Vector; import java.util.concurrent.CopyOnWriteArray
阅读全文
3.CAS源码探索
摘要:1.Compare And Set 示例程序 package com.mydemo; import java.util.concurrent.atomic.AtomicInteger; public class CASDemo { public static void main(String[] a
阅读全文
2.volatile不保证原子性
摘要:package com.mydemo; public class MyData2 { volatile int number=0; public void addPlusPlus() { number ++; } } class VolatileAtomicityDemo { public stat
阅读全文
1.可见性的代码验证说明
摘要:1.在修改完number值以后,while循环并没有检查到 package com.mydemo; import java.util.concurrent.TimeUnit; public class MyData { public int number=0; public void add_to_
阅读全文
15.生产者消费者阻塞队列版
摘要:package com.atgu; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.TimeUnit; imp
阅读全文