
高并发系列
java高并发系列
小鱼儿2020
这个作者很懒,什么都没留下…
展开
-
26-JUC中工具类CompletableFuture
文章目录CompletionStage接口CompletableFuture类runAsync 和 supplyAsync方法计算结果完成时的回调方法thenApply 方法handle 方法thenAccept 消费处理结果thenRun 方法thenCombine 合并任务thenAcceptBothapplyToEither 方法acceptEither 方法runAfterEither 方法runAfterBoththenCompose 方法参考CompletableFuture是java8中新转载 2020-05-14 13:30:32 · 288 阅读 · 0 评论 -
25-高并发中常见的限流方式
文章目录常见的限流的场景常见的限流算法参考常见的限流的场景秒杀活动,数量有限,访问量巨大,为了防止系统宕机,需要做限流处理国庆期间,一般的旅游景点人口太多,采用排队方式做限流处理医院看病通过发放排队号的方式来做限流处理。常见的限流算法通过控制最大并发数来进行限流(例如通过信号量 Semaphore)使用漏桶算法来进行限流使用令牌桶算法来进行限流参考第29天:高并发中常见的限流方式...转载 2020-05-14 12:45:32 · 179 阅读 · 0 评论 -
24-JUC中常见的集合
文章目录集合图List的实现类Set的实现类Map的实现类JUC集合包中的List和SetJUC集合包中MapJUC包中Queue集合图主体内容包括Collection集合和Map类;而Collection集合又可以划分为List(队列)和Set(集合)。List的实现类List的实现类主要有: LinkedList, ArrayList, Vector, Stack。LinkedList是双向链表实现的双端队列;它不是线程安全的,只适用于单线程。ArrayList是数组实现的队列,它是一个转载 2020-05-13 14:01:33 · 1057 阅读 · 0 评论 -
23-JUC中的阻塞队列
文章目录Queue接口BlockingQueue接口BlockingQueue常见的实现类ArrayBlockingQueueLinkedBlockingQueuePriorityBlockingQueueSynchronousQueueDelayQueueLinkedTransferQueue参考Queue接口队列是一种先进先出(FIFO)的数据结构,java中用Queue接口来表示队列Queue接口中定义了6个方法public interface Queue<E> extends C转载 2020-05-13 13:23:54 · 200 阅读 · 0 评论 -
22-ThreadLocal和InheritableThreadLocal
文章目录ThreadLocalInheritableThreadLocal参考ThreadLocal该类提供了线程局部 (thread-local) 变量。因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。//向Thread中某个口袋中放东西public void set(T value);//获取这转载 2020-05-11 17:38:25 · 148 阅读 · 0 评论 -
21-JUC中原子类
文章目录JUC中原子类介绍JUC中原子类思维导图基本类型原子类AtomicInteger 类常用方法数组类型原子类AtomicIntegerArray 类常用方法引用类型原子类AtomicReference 和 AtomicStampedRerence对象的属性修改原子类AtomicReferenceFieldUpdater参考JUC中的原子类都是都是依靠volatile、CAS、Unsafe类配合来实现的.JUC中原子类介绍atomic 翻译成中文是原子的意思。在化学上,我们知道原子是构成一般物质的转载 2020-05-11 17:14:00 · 156 阅读 · 0 评论 -
20-JUC底层工具类Unsafe
Unsafejava高并发中主要涉及到类位于java.util.concurrent包中,简称juc,juc中大部分类都是依赖于Unsafe来实现的,主要用到了Unsafe中的CAS、线程挂起、线程恢复等相关功能Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用从Unsafe功能图上看出,Unsafe提供的API大致可分为内存操作转载 2020-05-11 16:18:23 · 219 阅读 · 0 评论 -
19-java中的CAS
CASCAS,compare and swap的缩写,中文翻译成比较并交换。CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值 。否则,处理器不做任何操作。无论哪种情况,它都会在 CAS 指令之前返回该 位置的值。(在 CAS 的一些特殊情况下将仅返回 CAS 是否成功,而不提取当前 值。)CAS 有效地说明了“我认为位置 V 应该包含值 A;如果包含该值,则将 B 放到这个位置;否则,不要更改该位置,只告转载 2020-05-11 15:30:47 · 154 阅读 · 0 评论 -
18-Executor框架详解2
文章目录CompletionService接口ExecutorCompletionService类CompletionService接口CompletionService相当于一个执行任务的服务,通过submit丢任务给这个服务,服务内部去执行任务,可以通过服务提供的一些方法获取服务中已经完成的任务.Future submit(Callable task);Future submit(R...转载 2020-05-08 13:34:10 · 212 阅读 · 1 评论 -
17-Executor框架详解1
文章目录Executors框架介绍Executor接口ExecutorService接口ThreadPoolExecutor类ScheduleThreadPoolExecutor定时器Executors框架介绍Excecutor框架主要包含3部分的内容:任务相关的:包含被执行的任务要实现的接口:Runnable接口或Callable接口任务的执行相关的:包含任务执行机制的核心接口Exec...转载 2020-05-07 18:05:22 · 187 阅读 · 0 评论 -
16-JAVA线程池
文章目录线程池实现原理线程池中常见5种工作队列4种常见饱和策略合理地配置线程池线程池中线程数量的配置参考线程池实现原理当向线程池提交一个任务之后,线程池的处理流程如下:判断是否达到核心线程数,若未达到,则直接创建新的线程处理当前传入的任务,否则进入下个流程线程池中的工作队列是否已满,若未满,则将任务丢入工作队列中先存着等待处理,否则进入下个流程是否达到最大线程数,若未达到,则创建新的线...转载 2020-05-07 13:21:56 · 212 阅读 · 0 评论 -
15-循环栅栏CyclicBarrier
文章目录CyclicBarrier简介CountDownLatch和CyclicBarrier的区别参考CyclicBarrier简介CyclicBarrier通常称为循环屏障。它和CountDownLatch很相似,都可以使线程先等待然后再执行。不过CountDownLatch是使一批线程等待另一批线程执行完后再执行;而CyclicBarrier只是使等待的线程达到一定数目后再让它们继续执行...转载 2020-05-07 12:44:44 · 224 阅读 · 0 评论 -
14-CountDownLatch
文章目录参考参考第16天:JUC中等待多线程完成的工具类CountDownLatch转载 2020-05-07 12:36:40 · 110 阅读 · 0 评论 -
13-JUC中的Semaphore(信号量)
文章目录Semaphore常用场景:限流Semaphore主要方法总结参考synchronized和重入锁ReentrantLock,这2种锁一次都只能允许一个线程访问一个资源,而信号量可以控制有多少个线程可以访问特定的资源。Semaphore常用场景:限流比如有个停车场,有5个空位,门口有个门卫,手中5把钥匙分别对应5个车位上面的锁,来一辆车,门卫会给司机一把钥匙,然后进去找到对应的车位停...转载 2020-04-30 13:15:39 · 193 阅读 · 0 评论 -
12-JUC中的LockSupport工具类
文章目录关于线程等待/唤醒的方法关于Object类中的用户线程等待和唤醒的方法关于Condition中方法使用总结:Object和Condition的局限性LockSupport类LockSupport中常用的方法总结参考关于线程等待/唤醒的方法方式1:使用Object中的wait()方法让线程等待,使用Object中的notify()方法唤醒线程方式2:使用juc包中Condition的...转载 2020-04-28 22:40:10 · 239 阅读 · 0 评论 -
11-JUC中的Condition对象
文章目录ConditionCondition常用方法总结参考Condition任何一个java对象都天然继承于Object类,在线程间实现通信的往往会应用到Object的几个方法,比如wait()、wait(long timeout)、wait(long timeout, int nanos)与notify()、notifyAll()几个方法实现等待/通知机制,同样的, 在java Lock体...转载 2020-04-28 22:18:24 · 642 阅读 · 0 评论 -
10-JUC:ReentrantLock重入锁
文章目录synchronized的局限性ReentrantLockReentrantLock实现公平锁ReentrantLock获取锁的过程是可中断的ReentrantLock锁申请等待限时总结参考synchronized的局限性synchronized是java内置的关键字,它提供了一种独占的加锁方式。synchronized的获取和释放锁由jvm实现,用户不需要显示的释放锁,非常方便,然而...转载 2020-04-27 22:35:45 · 136 阅读 · 0 评论 -
9-线程安全和synchronized关键字
文章目录线程安全synchronized主要有3种使用方式参考线程安全当多个线程去访问同一个类(对象或方法)的时候,该类都能表现出正常的行为(与自己预想的结果一致),那我们就可以所这个类是线程安全的。造成线程安全问题的主要诱因有两点:一是存在共享数据(也称临界资源)二是存在多条线程共同操作共享数据因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证...转载 2020-04-23 14:05:17 · 236 阅读 · 0 评论 -
8-用户线程和守护线程
文章目录守护线程线程daemon的默认值总结参考守护线程守护线程是一种特殊的线程,在后台默默地完成一些系统性的服务,比如垃圾回收线程、JIT线程都是守护线程。与之对应的是用户线程,用户线程可以理解为是系统的工作线程,它会完成这个程序需要完成的业务操作。如果用户线程全部结束了,意味着程序需要完成的业务操作已经结束了,系统可以退出了。所以当系统只剩下守护进程的时候,java虚拟机会自动退出。j...转载 2020-04-23 12:57:52 · 220 阅读 · 0 评论 -
7-线程组
文章目录线程组创建线程关联线程组参考线程组我们可以把线程归属到某个线程组中,线程组可以包含多个线程以及线程组,线程和线程组组成了父子关系,是个树形结构,如下图:创建线程关联线程组/** * 线程组 测试 * * @author: zh * @date: 2020/4/22/022 22:31 */@Slf4jpublic class Demo1 { public s...转载 2020-04-22 23:21:08 · 134 阅读 · 0 评论 -
6-volatile与Java内存模型
文章目录volatile参考volatileJava线程之间的通信由Java内存模型(本文简称为JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内...转载 2020-04-22 22:23:12 · 121 阅读 · 0 评论 -
5-线程的基本操作
文章目录新建线程终止线程线程中断等待(wait)和通知(notify)挂起(suspend)和继续执行(resume)线程等待线程结束(join)和谦让(yeild)参考新建线程ThreadRunnable终止线程Thread类中提供了一个stop()方法,调用这个方法,就可以立即将一个线程终止。stop方法为何会被废弃而不推荐使用?stop方法过于暴力,强制把正在执行的方法停止...转载 2020-04-22 13:36:34 · 182 阅读 · 0 评论 -
4-深入理解进程和线程
文章目录进程线程参考进程**进程(Process)**是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。线程线程是轻量级的进程,是程序执行的最小单元,使用多线程而不是多进程去进行并发程序的设计,是因为线程间的切换和调度的成本远远小于进程线程的状态图线程的所有状态在java.l...转载 2020-04-21 23:20:35 · 186 阅读 · 0 评论 -
3-JMM相关的一些概念
文章目录原子性可见性有序性参考JMM(java内存模型)关键技术点都是围绕着多线程的原子性、可见性、有序性来建立的。原子性原子性是指操作是不可分的,要么全部一起执行,要么不执行。在java中,其表现在对于共享变量的某些操作,是不可分的,必须连续的完成。比如a++,对于共享变量a的操作,实际上会执行3个步骤:读取变量a的值,假如a=1a的值+1,为2将2值赋值给变量a,此时a的值应该为...转载 2020-04-21 23:11:20 · 250 阅读 · 0 评论 -
2-并发级别
文章目录阻塞无饥饿(Starvation-Free)无障碍(Obstruction-Free)无锁(Lock-Free)无等待参考由于临界区的存在,多线程之间的并发必须受到控制。根据控制并发的策略,我们可以把并发的级别分为阻塞、无饥饿、无障碍、无锁、无等待几种。阻塞个线程是阻塞的,那么在其他线程释放资源之前,当前线程无法继续执行。当我们使用synchronized关键字或者重入锁时,我们得到...转载 2020-04-21 13:32:26 · 288 阅读 · 0 评论 -
1-必须知道的几个概念
文章目录同步(Synchronous)和异步(Asynchronous)并发(Concurrency)和并行(Parallelism)临界区阻塞(Blocking)和非阻塞(Non-Blocking)死锁(Deadlock)、饥饿(Starvation)和活锁(Livelock)参考同步(Synchronous)和异步(Asynchronous)同步和异步通常来形容一次方法调用,**同步方法调...转载 2020-04-21 13:08:25 · 152 阅读 · 0 评论