随笔分类 -  并发案例

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




点击右上角即可分享
微信分享提示