多线程与并发编程
徒步远方999
不要让任何一件事让你丢失持续学习的能力!
展开
-
动态化调整线程池
动态化调整线程池原创 2023-11-26 17:09:42 · 906 阅读 · 0 评论 -
多线程的使用2
<bean id="smsSendProcessingTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <!-- 核心线程数,默认为1 --> <property name="corePoolSize" value="3" /> <!-- 最大线程数,默认为Integer.MAX_VALUE --> <prop..原创 2021-07-23 00:15:37 · 192 阅读 · 0 评论 -
多线程的使用1
第一种引用 <bean id="schedulerClientExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <property name="corePoolSize" value="5" /> <property name="maxPoolSize" value="5" /> <prope.原创 2021-07-22 00:14:29 · 157 阅读 · 0 评论 -
全面理解Java内存模型(JMM)及volatile关键字
点击此处转载 2021-02-09 10:23:50 · 116 阅读 · 0 评论 -
Disruptor并发框架使用三
一、Disruptor场景使用 场景2:在复杂场景下使用RingBuffer(希望P1生产的数据给C1,C2并行执行,最后C1,C2执行结束后C3执行)原创 2020-08-16 16:49:07 · 181 阅读 · 0 评论 -
Disruptor并发框架使用二
一、Disruptor场景使用 我们在创建Disruptor框架实例的时候,我们可以直接使用RingBuffer,以及其他的API操作。 场景1:使用EventProcessor消息处理器或者使用WorkerPool消息处理器 场景2:在复杂场景下使用RingBuffer(希望P1生产的数据给C1,C2并行执行,最后C1,C2执行结束后C3执行) 场景3:多生产者,多消费者的使用 使用EventProcessor消息处理器示例:public class Pro..原创 2020-07-27 20:23:43 · 305 阅读 · 0 评论 -
高并发之_秒杀系统
秒杀系统,请点击此处转载 2020-07-08 15:16:41 · 129 阅读 · 0 评论 -
Disruptor并发框架使用一
一、Disruptor并发框架简介 能够以很低的延迟,产生大量的交易,建立在JVM平台上,核心是一个业务逻辑的处理器,它能够在一个线程里每秒处理六百万订单。业务逻辑处理器是完全运行在内存中,使用事件源驱动方式。能够在无锁的情况下,实现网络Queue并发操作。 Disruptor是一个高性能的异步处理框架,或者认为是最快的消息处理框架(轻量JMS java message serverice),也可以认为是以一个观察者的模式实现,也可以任务是以一个监听者的模式实现。你可以理解为他是一.原创 2020-06-21 23:20:00 · 1202 阅读 · 0 评论 -
非阻塞同步算法与CAS(Compare and Swap)无锁算法
转发地址:https://www.cnblogs.com/Mainz/p/3546347.html转载 2020-05-14 20:31:08 · 162 阅读 · 0 评论 -
ReentrantReadWriteLock_读写锁
读写锁的核心是实现读与写的分离,在高并发的情况下,尤其是读多写少的情况下,性能要远高于重入锁.对于Synchronize,ReentrantLock时,同一个时间内,只能由一个线程进行访问被锁定的代码,而读写锁则不同,其本质是分成两个锁,即读锁和写锁. 在读锁下,多个线程可以并发的进行访问,但是在写锁的时候,只能一个个的顺序访问. 读读共享,写写互斥,读写互斥 一、读写锁代码...原创 2020-04-06 21:00:05 · 146 阅读 · 0 评论 -
重入锁和读写锁
在java多线程中,我们知道可以用synchronize关键字来实现线程间的同步互斥工作,还有更加优秀的机制去实现同步互斥工作,Lock对象。重入锁和读写锁,他们具有比synchronize更加强大的功能,并且具有嗅探锁定,多路分支等功能。 一、ReentrantLock(重入锁)(详见JDK-API)public class UseReentrantLock { priva...原创 2019-11-24 19:45:49 · 169 阅读 · 0 评论 -
Semaphore信号量应用
一、Semaphore(详见JDK-API) 一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。 二、应用场景 在semamphor...原创 2019-11-24 11:26:01 · 182 阅读 · 0 评论 -
CyclicBarrier和CountDownLatch的使用
一、CyclicBarrier(JDK-API) 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。例如:每个线程代表一个跑步运动员,当每...原创 2019-11-03 21:59:53 · 167 阅读 · 0 评论 -
线程池的使用及其拒绝策略
一、Executor框架提供的线程池(参考JDK6—API) 二、JDK提供自定义线程池(参考JDK6—API) 三、JDK提供自定义线程池详细说明(参考JDK6—API) 三、自定义拒绝策略 在实际应用中我们通常采用DiscardOldestPllicy策略,如果出现高并发的情况下,无法完全执行所有的任务。当然我们也可以自定义拒绝策略,把拒绝的任务摘要写进日志或...原创 2019-11-03 00:30:01 · 221 阅读 · 0 评论 -
ThreadPool 项目中用到的线程场景
1.场景1页面点击详情,需要十几个指标数据显示到页面上来,每次点击都是要显示最新的结果,开始采用的顺序执行,等执行完了统一返回前端,数据响应比较慢,因此采用线程池,并发提交任务提交任务有两种方式:execute:适用于不需要关注返回值的应用场景,只需要把线程丢到线程池中去执行就可以了submit:使用于需要关注返回值的场景需要自定义一个线程池:public class MyThread...原创 2019-03-08 14:42:46 · 315 阅读 · 0 评论 -
Synchronize 对象锁,类锁,重入锁
一、对象锁和类锁 1、线程安全:当多个线程访问某一个类(对象或者方法),这个类始终能够表现出正确的行为, 那么此类(对象或者方法)是线程安全的 synchronized:可以在任意对象或者方法上加锁,而加锁的这段代码称为‘互斥区’或者临界区2.对象锁和类锁具体参考:对象锁和类锁示例3.脏读:读到了共享变量中未刷新的值 二、重入锁 1、重入锁:关键字synchronized...原创 2019-09-22 22:42:12 · 514 阅读 · 0 评论 -
volatile关键字 线程可见性
一、概念 在java中,每一个线程都会有自己的工作内存区域,在主内存中对共享变量值进行拷贝,形成副本,放在每个线程独自的内存区域。当各自的线程运行时,会在自己的内存区域操作这些变量的值,为了存取一个共享的变量,一个线程通常获锁定并且清除自己的内存工作区,把这些共享变量的值从所有线程共享内存区域中正确的装入到自己的工作内存区域,当线程解锁时,把工作区域的变量值刷新到主内存中的共享变量中。...原创 2019-09-28 23:01:24 · 191 阅读 · 0 评论 -
多线程通信 wait和notify
一、概念 线程是操作系统中独立的个体,这些线程如果不通过特殊的手段进行处理,就无法组成一个完整的整体。因此线程通信就称为组成一个整体的必须条件之一。当线程之间存在通信,那么系统之间的交互就会更加强大。在提高CPU使用率的前提下,会使开发人员对线程任务在开发的过程中进行有效的把控和监督。 使用wait/notify实现线程之间的通信。这两个方法都是Object的类方法。也就是jav...原创 2019-10-01 19:51:31 · 186 阅读 · 0 评论 -
用wait/notify 模拟Queue
一、BlockingQueue支持阻塞队列 此例子主要是模拟LinkBlockingQueue中put和take方法public class SimulationQueue { // 1 装载元素的容器 private final List<Object> list = Lists.newArrayList(); // 2 计数器 pri...原创 2019-10-02 10:37:36 · 136 阅读 · 0 评论 -
单例在多线程中保证线程安全
在多线程模式中,考虑到性能和线程安全问题,一般选择两种比较经典的单例模式,既能提高性能,也能保证线程安全 1、double check instance 双重检查锁定 原理参考链接:双重检查锁定原理链接public class DubbleSingleton { private volatile static DubbleSingleton ds; public...原创 2019-10-02 15:27:46 · 293 阅读 · 0 评论 -
ThreadLocal保证线程安全
一、概念 线程局部变量,是一种多线程并发访问变量的解决方案。与synchronized等加锁的方式不同,ThreadLocal完全不提供锁。而使用以空间换时间的手段,为每个线程提供变量的副本,以保证线程安全。 从性能上来说,ThreadLocal不具有绝对的优势,在并发不是很高的时候,加锁的性能会更好,但是作为一套与锁完全无关的线程安全解决方案,在高并发量或者竞争激烈的场景,使用T...原创 2019-10-02 16:05:30 · 869 阅读 · 0 评论 -
Concurrent和CopyOnWrite容器
一、ConcurrentMap concurrentMap接口下面有两个重要实现: ConcurrentHashMap ConcurrentSkipListMap(支持并发排序功能,弥补ConcurrentHashMap)1、ConcurrentHashMap内部使用段(segment)来表示这些不同的部分,每个段其实就是一个小的HashTable,它们有自己的锁。只要多个修...原创 2019-10-04 22:05:03 · 395 阅读 · 0 评论 -
ConcurrentLinkQueue和BlockingQueue
在并发队列上,JDK提供了两种实现,一个是以ConcurrentLinkQueue为代表的高性能的队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue 一、ConcurrentLinkedQueue ConcurrentLinkedQueue:是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常ConcurrentLin...原创 2019-10-07 17:25:09 · 519 阅读 · 0 评论 -
多线程设计模式之Future、Master-Worker和生产者-消费者模型
并行设计模式属于设计优化的一部分,它是对一些常用的多线程结构的总结和抽象。与串行程序相比,并行程序的结构通常更为复杂。因此合理的使用并行模式在开发中更有意义,目前在开发中应用最多的是Future,Master-Woker和生产者-消费者模式 一、Future模式 流程图如下public interface Data { String getRequest();}...原创 2019-10-07 23:11:02 · 261 阅读 · 0 评论 -
ThreadPool ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别
此博客内容转载自:https://dongxuan.iteye.com/blog/901689 工作中多处接触到了ThreadPoolExecutor。趁着现在还算空,学习总结一下。 前记: jdk官方文档(javadoc)是学习的最好,最权威的参考。 文章分上中下。上篇中主要介绍ThreadPoolExecutor接受任务相关的两方面入参的意义和区别,池大小参数core...转载 2019-01-30 14:34:27 · 526 阅读 · 0 评论