java多线程
文章平均质量分 69
xushiyu1996818
这个作者很懒,什么都没留下…
展开
-
java多线程 累加计数
目录题目与思路方法一方法二方法三总结注意:本文参考java多线程累加计数_安迪爸爸-CSDN博客_多线程计数题目与思路给定count=0;让5个线程并发累加到1000;思路创建一个类MyRunnable,实现Runnable(继承Thread类也可)定义一个公共变量count(初始值为0),5个线程都可以访问到;创建5个线程并发递增count到1000;这块注意Thread和Runnable类的区别,Thread类是线程类,可以直接new Thread..原创 2022-02-18 00:10:00 · 2477 阅读 · 0 评论 -
java多线程 两个线程交叉打印1到100的数字
目录解法1 静态原子变量 死循环解法2 静态变量 死循环/wait 锁住class解法3 静态变量ReentrantLockCondition扩展问题注意:本文参考面试题精选:两个线程按顺序交替输出1-100 - xindoo - 博客园具体题目是这样的,两个线程交替按顺序输出1-100,第一个线程只能输出偶数,第二线程输出奇数,想象下两个小孩轮流喊数。两个线程交替输出,这就意味着它俩是需要协同的,协同意味着二者之间要有信息传递,如何相互传递信息? 你可能直接想到,既...原创 2022-02-18 00:03:30 · 3494 阅读 · 0 评论 -
java多线程 生产者消费者模型总结
目录生产者消费者模型简介wait,notify方案ReentrantLock的实现阻塞队列的实现使用信号量Semaphore实现无锁的缓存框架: Disruptor注意:本文参考【Java总结】生产者消费者模型_zhujohnle的专栏-CSDN博客生产者消费者模型Java实现 - 简书消费者读取处理慢_Java高并发之Disruptor框架:单线程每秒处理600万订单高并发框架..._weixin_29628611的博客-CSDN博客生产者消费者模型简介生产..原创 2022-02-17 23:52:00 · 469 阅读 · 0 评论 -
java多线程 CAS和自旋锁和unsafe总结
注意:本文参考《吊打面试官》系列-乐观锁、悲观锁CAS简介CAS(Compare And Swap 比较并且替换)是乐观锁的一种实现方式,是一种轻量级锁,JUC 中很多工具类的实现就是基于 CAS 的。CAS 是怎么实现线程安全的?线程在读取数据时不进行加锁,在准备写回数据时,先去查询原值,操作的时候比较原值是否修改,若未被其他线程修改则写回,若已被修改,则重新执行读取流程。举个栗子:现在一个线程要修改数据库的name,修改前我会先去数据库查name的值,发现name=“帅丙”,拿到..原创 2022-02-14 23:56:55 · 636 阅读 · 0 评论 -
java多线程 volatile关键字与JMM理论总结
注意:本文参考 https://javaguide.cn/java/concurrent/java%E5%B9%B6%E5%8F%91%E8%BF%9B%E9%98%B6%E5%B8%B8%E8%A7%81%E9%9D%A2%E8%AF%95%E9%A2%98%E6%80%BB%E7%BB%93/#_2-1-cpu-缓存模型CPU 缓存模型为什么要弄一个 CPU 高速缓存呢?类比我们开发网站后台系统使用的缓存(比如 Redis)是为了解决程序处理速度和访问常规关系型数据库速度不对等的问题。 ..原创 2022-02-13 17:47:49 · 761 阅读 · 0 评论 -
java多线程 锁和Condition总结
注意:本文参考 java并发编程的艺术从ReentrantLock的实现看AQS的原理及应用 | JavaGuide重入锁ReentrantLockReentrantLock简介重入锁ReentrantLock, 顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对 资源的重复加锁。除此之外,该锁的还支持获取锁时的公平和非公平性选择。 回忆在同步器一节中的示例(Mutex), 同时考虑如下场景当一个线程调用Mutex的lock() 方法获取锁之后,如果再次调用lock()方法...原创 2022-02-13 18:13:04 · 1608 阅读 · 0 评论 -
java多线程 并发基础
注意:本文参考Java 并发常见知识点&面试题总结(基础篇) | JavaGuide什么是线程和进程?何为进程?进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。如下图所示,在 windows 中通过查看任务管理器的方式,我们就可以清楚看到 window 当..原创 2022-02-10 23:57:07 · 724 阅读 · 0 评论 -
java多线程 SynchronousQueue源码分析
目录前言Transferer抽象类TransferStack节点成员节点类型TransferStack成员transfer方法awaitFulfillcleanTransferQueue节点成员节点类型TransferQueue成员transfer方法awaitFulfillclean无效操作总结注意:本文转自https://blog.csdn.net/anlian523/article/details/107872233前..原创 2021-05-07 22:30:55 · 179 阅读 · 0 评论 -
java多线程 LinkedTransferQueue源码分析
目录前言LinkedTransferQueue概述术语解释xfer交易后来的一方交易先来的一方tryAppendtryMatchDataunsplice为什么是普通语义而不是CAS内部删除 remove迭代器总结注意:本文转自 https://blog.csdn.net/anlian523/article/details/107876299前言LinkedTransferQueue是一种特殊的无界阻塞队列,它提供一种Transfer的功能,..原创 2021-05-07 22:18:05 · 200 阅读 · 0 评论 -
java多线程 DelayQueue源码分析
目录前言成员Leader-Follower入队出队take内存泄漏超时poll迭代器总结注意:本文转自https://blog.csdn.net/anlian523/article/details/107801405前言DelayQueue是一个无界阻塞队列,它和PriorityBlockingQueue一样是一个优先队列,但区别在于队列元素只能放置Delayed对象,而且只有元素到期后才能将其出队。内部是一个最小堆,堆顶永远是最先“到期”的那个元..原创 2021-05-07 22:01:52 · 238 阅读 · 2 评论 -
java多线程 PriorityBlockingQueue源码分析
目录前言成员构造器原地建堆入队offer扩容出队poll获取堆顶方法peek内部删除迭代器总结注意:本文转自https://blog.csdn.net/anlian523/article/details/107703623前言PriorityBlockingQueue是一个无界阻塞队列,它的出队方式不再是FIFO,而是优先级高的先出队。其内部实现是最小堆,即堆顶元素是逻辑上最小的那个元素,也是最先出队的那个元素。简单的说,如果a.com..原创 2021-05-06 23:00:27 · 170 阅读 · 0 评论 -
java多线程 LinkedBlockingDeque源码分析
目录前言成员构造器入队操作putFirstputLast出队操作takeFirsttakeLast删除内部节点removeFirstOccurrenceremoveLastOccurrence迭代器总结注意:本文转自 https://blog.csdn.net/anlian523/article/details/107685245前言LinkedBlockingDueue是一种有界阻塞队列,它的底层是双向链表,所以它是双向的。也就是说,..原创 2021-05-06 22:15:47 · 204 阅读 · 0 评论 -
java多线程 LinkedBlockingQueue源码分析
目录前言成员构造器入队addofferput超时offer入队方法总结出队removepolltake超时poll出队方法总结内部删除 remove(Object o)获取操作peekelement迭代器总结注意:本文转自 https://blog.csdn.net/anlian523/article/details/107601481前言LinkedBlockingQueue是一种FIFO(first-in..原创 2021-05-06 22:05:34 · 296 阅读 · 0 评论 -
java多线程 ArrayBlockingQueue源码分析
目录前言成员构造器入队addofferput超时offer总结出队peekpolltake超时poll总结remove 删除操作总结注意:本文转自 https://blog.csdn.net/anlian523/article/details/107577452前言ArrayBlockingQueue是一种FIFO(first-in-first-out 先入先出)的有界阻塞队列,底层是数组,也支持从内部删除元素。并发操作依赖..原创 2021-05-06 21:38:54 · 161 阅读 · 0 评论 -
java多线程 ConcurrentLinkedDeque源码分析
目录前言概述linkFirst 入队pollFirst 获取并出队first()succ()unlink()unlinkFirstskipDeletedPredecessorsupdateHeadupdateTailgc-unlinking松弛阈值unlink的Unlink interior node逻辑peekFirst 仅获取remove 删除操作size迭代器总结注意:本文转自 https://blog.csdn.ne..原创 2021-05-06 21:22:12 · 358 阅读 · 0 评论 -
java多线程 ConcurrentLinkedQueue源码分析
目录前言概述不变式基本不变式headtail初始化队列初始化Node初始化add/offer 入队操作出队操作pollpeekfirstremove 删除操作remove的bugsize 弱一致性的方法addAll迭代器总结注意:本文转自 https://blog.csdn.net/anlian523/article/details/107453433前言ConcurrentLinkedQueue是一种FIFO(..原创 2021-05-06 20:23:11 · 290 阅读 · 0 评论 -
java多线程 ScheduledThreadPoolExecutor源码分析
目录简介4个字段,方法now,内部类ScheduledTutureTask方法canRunInCurrentRunState,delayedExecute,reExecutePeriodic,onShutdown,2个decorateTask,4个构造函数方法2个triggerTime,overflowFree,4个scheduleXXX,execute,3个submit方法3个setXXX/getXXX,shutdown,shutdownNow,getQueue内部类Delayed原创 2021-05-05 22:35:30 · 244 阅读 · 0 评论 -
java多线程 ConcurrentHashMap源码分析
目录前言常量成员节点类构造器put 插入操作加锁情况红黑树的binCount固定为2返回情况spreadinitTablehelpTransferresizeStampsizeCtl的低16bit退出循环的条件treeifyBintryPresizeaddCount计数部分计数部分结束时扩容部分CAS失败影响扩容fullAddCountwasUncontended的作用collide的作用cellsBus原创 2021-05-05 22:14:54 · 263 阅读 · 0 评论 -
java多线程 ThreadPoolExecutor源码分析
简介package java.util.concurrent;import java.util.concurrent.locks.AbstractQueuedSynchronizer;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;import java.util.concurrent.atomic.AtomicInteger;import java.uti原创 2021-04-24 19:17:12 · 152 阅读 · 0 评论 -
java多线程 ConcurrentSkipListMap源码分析
目录前言源码注释术语节点定义构造器get 查找操作返回情况findPredecessorput 插入操作第一部分第二部分第三部分假设新建层数没有超过最大层数假设新建层数超过了最大层数返回情况remove 删除操作findNodetryReduceLevel返回情况marker存在的必要性如果marker不存在marker存在时总结注意:本文转自https://blog.csdn.net/anlian523/a..原创 2021-04-22 23:12:06 · 306 阅读 · 0 评论 -
java多线程 CopyOnWriteArraySet源码分析
目录前言与CopyOnWriteArrayList不同之处addIfAbsentaddAllAbsent总结注意:本文转载 https://blog.csdn.net/anlian523/article/details/106984506前言类似于上一篇讲的CopyOnWriteArrayList,CopyOnWriteArraySet可以认为是一个写时复制的HashSet。但CopyOnWriteArraySet的底层实现完全依赖了CopyOnWriteArrayL..原创 2021-04-22 22:29:40 · 192 阅读 · 0 评论 -
java多线程 CopyOnWriteArrayList源码分析
目录前言核心成员常用方法getsetaddremoveremove(int index)remove(Object o)findIndex代码块之后cleartoArray迭代器总结注意:本文转载:https://blog.csdn.net/anlian523/article/details/106978859前言CopyOnWriteArrayList 是一种写时复制的ArrayList,它将读操作和写操作的情形区分开来,并在写操作时拷贝原创 2021-04-22 22:17:56 · 194 阅读 · 0 评论 -
java多线程 Delayed,ScheduledFuture,ScheduledExecutorService,RunnableScheduledFuture源码分析
package java.util.concurrent;/** * 一个混合样式的接口,用于标记在给定延迟后应起作用的对象。 * * <p>该接口的实现必须定义一个compareTo方法,该方法提供与其getDelay方法一致的排序。 * * @since 1.5 * @author Doug Lea */public interface Delayed extends Comparable<Delayed> { /** * 在给定的时间单.原创 2021-04-22 21:57:45 · 459 阅读 · 0 评论 -
java多线程 ThreadFactory源码分析
package java.util.concurrent;/** * 根据需要创建新线程的对象。 * 使用线程工厂消除了对新线程的Thread(Runnable)调用的硬连接, * 使应用程序能够使用特殊的线程子类、优先级等。 * * <p> * 这个接口最简单的实现是: * <pre> {@code * class SimpleThreadFactory implements ThreadFactory { * public Thread newThr.原创 2021-04-21 21:43:52 · 159 阅读 · 0 评论 -
java多线程 RejectedExecutionHandler源码分析
package java.util.concurrent;/** * 不能由ThreadPoolExecutor执行的任务的处理程序。 * * @since 1.5 * @author Doug Lea */public interface RejectedExecutionHandler { /** * 方法,当执行不能接受任务时,ThreadPoolExecutor可以调用该方法。 * 这种情况可能发生在没有更多线程或队列槽可用的情况下,因为它们的边界将被.原创 2021-04-21 21:42:50 · 138 阅读 · 0 评论 -
java多线程 AbstractExecutorService源码分析
package java.util.concurrent;import java.util.*;/** * 提供ExecutorService方法的默认实现。 * 这个类使用newTaskFor返回的RunnableFuture实现了submit、invokeAny和invokeAll方法,该方法默认为这个包中提供的FutureTask类。 * 例如,submit(Runnable)的实现创建了一个关联的RunnableFuture,该RunnableFuture被执行并返回。 * 子...原创 2021-04-21 21:42:36 · 162 阅读 · 0 评论 -
java多线程 ExecutorService源码分析
package java.util.concurrent;import java.util.List;import java.util.Collection;/** * 一个执行器,它提供管理终止的方法,以及可以产生Future来跟踪一个或多个异步任务的进度的方法。 * * <p>ExecutorService可以被关闭,这将导致它拒绝新的任务。 * 提供了两种不同的方法来关闭ExecutorService。 * * shutdown方法允许之前提交的任务在终止前执行...原创 2021-04-21 21:42:12 · 231 阅读 · 0 评论 -
java多线程 Executor源码分析
package java.util.concurrent;/** * 执行已提交的Runnable任务的对象。 * 这个接口提供了一种将任务提交与每个任务如何运行的机制(包括线程使用、调度等细节)分离的方法。 * 通常使用Executor而不是显式地创建线程。 * 例如,与其对一组任务调用new Thread(new(RunnableTask())).start(),不如使用: * * <pre> * Executor executor = <em>anExecu.原创 2021-04-07 22:08:25 · 188 阅读 · 1 评论 -
java多线程 RunnableFuture源码分析
package java.util.concurrent;/** * 一个Runnable的Future。 * 成功执行run方法会导致future的完成,并允许访问它的结果。 * * @see FutureTask * @see Executor * @since 1.6 * @author Doug Lea * @param <V> The result type returned by this Future's {@code get} method */pub.原创 2021-04-07 22:07:34 · 157 阅读 · 0 评论 -
java多线程 Future源码分析
package java.util.concurrent;/** * Future表示异步计算的结果。 * 提供了一些方法来检查计算是否完成、等待计算完成以及检索计算结果。 * 只有在计算完成后,才可以使用get方法检索结果,如果有必要,就会阻塞,直到准备好为止。 * cancel方法执行取消操作。提供了其他方法来确定任务是正常完成还是被取消。 * * 计算完成后,不能取消计算。 * 如果您想使用Future来实现可取消性,但不提供可用的结果, * 则可以使用Future<...原创 2021-04-07 22:07:22 · 215 阅读 · 1 评论 -
java多线程 Callable源码分析
package java.util.concurrent;/** * 返回结果并可能引发异常的任务。 * 实现者定义了一个没有参数的方法,称为call。 * * <p>可调用接口类似于java.lang.Runnable, * 这两个类的实例都可能由另一个线程执行。 * 然而,Runnable不返回结果,也不能抛出检查异常。 * * <p>Executors类包含实用方法,可以将其他常用形式转换成Callable的类。 * * 与Runnable相比,Ca.原创 2021-04-07 22:07:08 · 175 阅读 · 1 评论 -
java多线程 Runnable源码分析
package java.lang;/** * Runnable接口应该由,实例要由线程执行的类,来实现。 * 类必须定义一个名为run的无参数方法。 * * <p> * 该接口旨在为那些希望在活动时执行代码的对象提供一个通用协议。 * 例如,Runnable是由Thread类实现的。 * 处于活动状态仅仅意味着一个线程已经启动,但还没有停止。 * * <p> * 此外,Runnable提供了在不子类化Thread的情况下使类处于活动状态的方法。 * .原创 2021-04-07 22:03:21 · 325 阅读 · 0 评论 -
java多线程 FutureTask源码分析
目录简介字段state,各种状态常量,callable,outcome,runner,waiters方法report,2个构造函数,isCancelled,isDone,cancel,2个get方法done,set,setException,run,runAndReset,handlePossibleCancellationInterrupt内部类WaitNode,方法finishCompletion,awaitDone,removeWaiter,字段UNSAFE,3个Offset简原创 2021-04-06 17:19:52 · 172 阅读 · 0 评论 -
java多线程 ReentrantReadWriteLock源码分析
目录简介字段readerLock,writerLock,sync,2个构造函数,方法writeLock,readLock内部类Sync内部类NonFairSync,FairSync内部类ReadLock内部类WriteLock方法isFair,getOwner,getReadLockCount,2个isWriteLockedXXX,2个getXXXHoldCount,4个getQueuedXXXThreads方法2个getQueuedXXX,hasWaiters,getWai原创 2021-03-28 14:25:37 · 197 阅读 · 0 评论 -
java多线程 CyclicBarrier源码分析
目录简介内部类Generation,字段lock,trip,parties,barrierCommand,generation,count方法nextGeneration,breakBarrier,dowait,2个构造函数方法getParties,2个await,isBroken,reset,getNumberWaiting简介package java.util.concurrent;import java.util.concurrent.locks.Condition;im原创 2021-03-28 13:34:01 · 158 阅读 · 0 评论 -
java多线程 CountDownLatch源码分析
目录简介内部类Sync字段sync,构造函数,方法2个await,countDown,getCount,toString简介package java.util.concurrent;import java.util.concurrent.locks.AbstractQueuedSynchronizer;/** * 一种同步帮助,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。 * * <p>用给定的count初始化倒计时锁存器。 * 由于调用了倒计原创 2021-03-28 12:36:22 · 131 阅读 · 0 评论 -
java多线程 Semaphore源码分析
简介package java.util.concurrent;import java.util.Collection;import java.util.concurrent.locks.AbstractQueuedSynchronizer;/** * 计数信号量。从概念上讲,一个信号量维护一组许可。 * 如果有必要,每个acquire阻塞直到一个许可可用,然后获取它。 * 每次release都会增加一个许可,潜在地释放一个阻塞的获取者。 * 但是,没有使用实际的permit对象; *原创 2021-03-28 12:17:38 · 179 阅读 · 0 评论 -
java多线程 ThreadLocal源码分析
简介package java.lang;import java.lang.ref.*;import java.util.Objects;import java.util.concurrent.atomic.AtomicInteger;import java.util.function.Supplier;/** * 这个类提供线程局部变量。这些变量与普通变量的不同之处在于, 每个访问这些变量的线程(通过其get或set方法)都有自己独立初始化的变量副本。 * ThreadLocal实例原创 2021-03-14 12:28:28 · 233 阅读 · 0 评论 -
java nio AtomicInteger源码分析
目录简介字段unsafe,valueOffset,value,2个构造函数方法get,set,lazySet,getAndSet,compareAndSet,weakCompareAndSet方法5个getAndXXX,5个XXXAndGet方法toString,4个XXXValue简介package java.util.concurrent.atomic;import java.util.function.IntUnaryOperator;import java.util原创 2021-02-24 20:27:41 · 225 阅读 · 2 评论 -
java nio AtomicStampedReference源码分析
简介package java.util.concurrent.atomic;/** * AtomicStampedReference维护一个对象引用和一个整数“stamp”,它可以自动更新。 * * <p>注意:这个实现通过创建内部对象来维护stampedreference,这些对象表示“boxed”[reference, integer]对。 * * @since 1.5 * @author Doug Lea * @param <V> The type of原创 2021-02-24 20:28:42 · 188 阅读 · 0 评论