Java并发编程
MRZvc
静坐常思己过,闲谈莫论人非。
展开
-
CompletableFuture 使用详解
1、 runAsync 和 supplyAsync方法CompletableFuture 提供了四个静态方法来创建一个异步操作。public static CompletableFuture<Void> runAsync(Runnable runnable)public static CompletableFuture<Void> runAsync(Runnable runnable, Executor executor)public static <U>原创 2020-09-25 14:46:05 · 172 阅读 · 0 评论 -
CAS初识
一、CAS概念与原理 CAS,全称Compare And Swap(比较与交换),解决多线程并行情况下使用锁造成性能损耗的一种机制。 实现思想 CAS(V, A, B),V为内存地址、A为预期原值,B为新值。如果内存地址的值与预期原值相匹配,那么将该位置值更新为新值。否则,说明已经被其他线程更新,处理器不做任何操作;无论哪种情况,它都会在 CAS 指令之前返回该位置的值。而我...原创 2019-08-21 18:00:54 · 155 阅读 · 0 评论 -
AQS详解
AQS是AbstractQueuedSynchronizer的简称。AQS提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,如下图所示。AQS为一系列同步器依赖于一个单独的原子变量(state)的同步器提供了一个非常有用的基础。子类们必须定义改变state变量的protected方法,这些方法定义了state是如何被获取或释放的。鉴于此,本类中的其他方法执行所有的排队和阻塞机制。子类...原创 2019-08-22 16:14:35 · 207 阅读 · 0 评论 -
如何设计一个百万级用户的抽奖系统?
1、抽奖系统的背景引入本文给大家分享一个之前经历过的抽奖系统的流量削峰架构的设计方案。抽奖、抢红包、秒杀,这类系统其实都有一些共同的特点,那就是在某个时间点会瞬间涌入大量的人来点击系统,给系统造成瞬间高于平时百倍、千倍甚至几十万倍的流量压力。比如抽奖,有一种场景:某个网站或者APP规定好了在某个时间点,所有人都可以参与抽奖,那么可能百万级的用户会蹲守在那个时间点,到时间大家一起参与这个抽奖。抢...原创 2019-08-30 15:06:24 · 203 阅读 · 0 评论 -
一个简单的抽奖算法
通过随机数的区间分布实现一个抽奖算法。接受一个包含奖品中奖概率的list,返回中奖的奖品。先定义一个抽象奖品类。public class AbstractPrize { private double probability; // 中奖概率 private int prizeNum; // 奖品数量(暂时没用到) private String prizeName; // 奖品名...原创 2019-08-30 10:59:40 · 386 阅读 · 0 评论 -
14-ThreadLocal类详细剖析
ThreadLocal类详细剖析对ThreadLocal的理解JDK中的源码是这样描述ThreadLocal的:This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (...原创 2019-09-02 17:46:37 · 108 阅读 · 0 评论 -
3-Java中如何创建线程
Runnable和Thread实现多线程的区别Java中实现多线程有两种方法:继承Thread类、实现Runnable接口,在程序开发中只要是多线程,肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下优势: 可以避免由于Java的单继承特性而带来的局限; 增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的; ...原创 2019-09-03 10:40:03 · 91 阅读 · 0 评论