多线程
文章平均质量分 94
weixin_42073629
这个作者很懒,什么都没留下…
展开
-
JDK线程池拒绝策略示例及实现源码
一、拒绝策略介绍线程池的拒绝策略,是指当任务添加到线程池中被拒绝,而采取的处理措施。当任务添加到线程池中之所以被拒绝,可能是由于:第一,线程池异常关闭。第二,任务数量超过线程池的最大限制。线程池共包括4种拒绝策略,它们分别是:AbortPolicy,CallerRunsPolicy,DiscardOldestPolicy和DiscardPolicy。AbortPolicy -- 当任务添加到线程池中被拒绝时,它将抛出 RejectedExecutionException ..原创 2021-07-03 14:50:43 · 280 阅读 · 0 评论 -
JDK线程池工作原理
一、线程池工作原理(新任务进入时线程池的执行策略)线程池的触发时机如下图:当一个任务通过execute(Runnable)方法欲添加到线程池时:1、如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。2、如果此时线程池中的数量等于corePoolSize,但是缓冲队列workQueue未满,那么任务被放入缓冲队列workQueue中,等待线程池中线程调度执行。3、如果此时线程池中的数量大于corePoolSi...原创 2021-07-03 14:28:17 · 265 阅读 · 0 评论 -
线程生命周期及六种状态
一、线程的生命周期及五种基本状态关于Java中线程的生命周期,首先看一下下面这张较为经典的图:上图中基本上囊括了Java中多线程各重要知识点。掌握了上图中的各知识点,Java中的多线程也就基本上掌握了。主要包括:Java线程具有七种基本状态新建状态(New):至今尚未启动的线程的状态。线程刚被创建,但尚未启动。如:Thread t = new MyThread();就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就原创 2021-06-05 23:34:23 · 1635 阅读 · 0 评论 -
Java多线程--理解缓存一致性协议以及对并发编程的影响
Java作为一个跨平台的语言,它的实现要面对不同的底层硬件系统,设计一个中间层模型来屏蔽底层的硬件差异,给上层的开发者一个一致的使用接口。Java内存模型就是这样一个中间层的模型,它为程序员屏蔽了底层的硬件实现细节,支持大部分的主流硬件平台。要理解Java内存模型以及一些处理高并发的技术手段,理解一些基本的硬件知识是必须的。这篇会说一下跟并发编程相关的一些硬件知识。一个基本的CPU执行计算的过...原创 2020-03-09 00:12:19 · 206 阅读 · 0 评论 -
Java多线程--缓存一致性问题和缓存一致性协议MESI(二)
写缓冲器与无效化背景:MESI 协议解决了缓存一致性问题, 但是其自身也存在一个性能弱点——处理器执行写内存操作时,必须等待其他所有处理器将其高速缓存中的相应副本数据删除并接收到这些处理器所回复的 Invalidate Acknowledge/Read Response消息之后才能将数据写入高速缓 存。为了规避和减少这种等待造成的写操作的延迟 (Latency), 硬件设计者引入了写缓冲器...原创 2020-03-08 13:25:05 · 269 阅读 · 0 评论 -
Java多线程--缓存一致性问题和缓存一致性协议MESI(一)
高速缓存是一种存取速率远比主内存大而容量远比主内存小的存储部件,每个处理器都有其高速缓存。引入高速缓存之后, 处理器在执行内存读、 写操作的时候并不直接与主内存打交道, 而是通过高速缓存进行的。变量名相当于内存地址, 而变量值则相当于相应内存空间所存储的数据。从内部结构来看高速缓存相当于一个拉链散列表(ChainedHash Table). 它包含若干桶(Bucket, 硬件上称之为Set),...原创 2020-03-08 13:20:35 · 963 阅读 · 0 评论 -
Java多线程-- 生产消费者实现
一、 生产/消费者模型生产/消费者问题是个非常典型的多线程问题,涉及到的对象包括“生产者”、“消费者”、“仓库”和“产品”。他们之间的关系如下:(01) 生产者仅仅在仓储未满时候生产,仓满则停止生产。(02) 消费者仅仅在仓储有产品时候才能消费,仓空则等待。(03) 当消费者发现仓储没产品可消费时候会通知生产者生产。(04) 生产者在生产出可消费产品时候,应该通知等待的消费者去消费。...原创 2020-01-27 05:32:10 · 166 阅读 · 0 评论 -
Java多线程 - Fork/Join
1.什么是Fork/Join?Fork/Join 框架 也称为分解/合并框架,Fork/Join 框架的基本思想是分而治之。什么是分而治之?分而治之就是将一个复杂的计算,按照设定的阈值进行分解成多个计算,然后将各个计算结果进行汇总。相应的ForkJoin将复杂的计算当做一个任务。而分解的多个计算则是当做一个子任务。2.ForkJoin的使用使用ForkJoin框架,需要创建一个Fo...原创 2019-10-03 02:00:59 · 275 阅读 · 0 评论 -
Java多线程 - Disruptor2
Disruptor框架中生产者、消费者的各种复杂依赖场景下的使用总结具体而言,它可以解决如下方面:- 并行计算实现;- 串行依次执行;- 菱形方式执行;- 链式并行计算。并且基于以上情况,每种类型的消费者都可以池化,默认初始化多个同一类型的消费者实例,并行处理,提高系统吞吐量。本样例是一个生产者生产一个Long类型的数值,消费者对该数值进行处理的操作。本样例对以上各种情况的实现只...原创 2019-10-03 00:32:09 · 277 阅读 · 0 评论 -
Java多线程 - Disruptor1
Disruptor是什么?Disruptor是一个高性能的异步处理框架,或者可以认为是线程间通信的高效低延时的内存消息组件,它最大特点是高性能,其LMAX架构可以获得每秒6百万订单,用1微秒的延迟获得吞吐量为100K+。它是如何实现高性能的呢?它由于JDK内置的队列有什么区别呢?JDK内置内存队列?我们知道,Java内置了几种内存消息队列,如下所示:队列 加锁方式 ...原创 2019-09-29 21:32:48 · 205 阅读 · 0 评论 -
Java多线程 - Executor
Executor(一)ExecutorService 线程池一、ExecutorService 介绍Java API 对 ExecutorService 接口的实现有两个,它们是:ThreadPoolExecutor ScheduledThreadPoolExecutor二、ExecutorService 创建创建一个什么样的 ExecutorService 的实例(...原创 2019-09-29 15:29:30 · 498 阅读 · 0 评论 -
Java多线程 -ThreadLocal
1、什么是ThreadLocal?ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get或set方法访问)时能保证各个线程里的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程的上下文。可以总结为一句话:ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内...原创 2019-09-22 05:20:52 · 165 阅读 · 0 评论 -
Java多线程 - Master/Worker模式
1.什么是Master/Worker模式?Master-Worker模式是常用的并行模式之一。它的核心思想是,系统由两类进程协作工作:Master进程和Worker进程。Master进程负责接收和分配任务,Worker进程负责处理子任务。当各个Worker进程将子任务处理完成后,将结果返回给Master进程,由Master进程做归纳和汇总,从而得到系统的最终结果,其处理过程如下图所示M...原创 2019-06-26 11:11:51 · 977 阅读 · 0 评论 -
Java多线程 - CompletableFuture模式
1.什么是CompletableFuture?Future的缺点:不能手动完成 当你写了一个函数,用于通过一个远程API获取一个电子商务产品最新价格。因为这个 API 太耗时,你把它允许在一个独立的线程中,并且从你的函数中返回一个 Future。现在假设这个API服务宕机了,这时你想通过该产品的最新缓存价格手工完成这个Future 。你会发现无法这样做。 Future 的结果在非阻塞的...原创 2019-07-02 00:28:04 · 764 阅读 · 0 评论 -
Java多线程 - Future模式
1.什么是Futrue模式?Future模式是多线程开发中非常常见的一种设计模式。它的核心思想是异步调用。当我们需要调用一个函数方法时。如果这个函数执行很慢,那么我们就要进行等待。但有时候,我们可能并不急着要结果。因此,我们可以让被调用者立即返回,让他在后台慢慢处理这个请求。对于调用者来说,则可以先处理一些其他任务,在真正需要数据的场合再去尝试获取需要的数据。用生活中的例子来打个比喻,就像...原创 2019-06-17 18:55:04 · 388 阅读 · 0 评论