多线程
文章平均质量分 71
缘丶沐逸尘
技术热爱者
展开
-
高性能存储队列:Disruptor
文章目录一、JUC包下队列的缺陷二、Disruptor为避免缺陷而设计的解决方案1、存储结构:环形数组、2、定位方式:位运算3、线程安全策略:CAS4、存储方式:缓存填充5、任务执行:事件监听机制三、Disruptor的针对数据覆盖的四种策略1、BlockingWaitStrategy:2、SleepingWaitStrategy:3、YieldingWaitStrategy:4、BusySpinWaitStrategy:四、Disruptor的简单使用1、构建消息载体(事件Event)2、构建消息(事件)原创 2021-12-17 15:58:05 · 858 阅读 · 0 评论 -
Future的缺陷|CompletableFuture的简单使用
文章目录一、Future的缺陷二、CompletableFuture简介和相关API三、CompletableFuture的简单使用一、Future的缺陷1、Future只提供了get方法来获取结果,并且是阻塞的。所以在并发情况下只能等待所有线程执行完后才能获取结果,除此之外别无它法;2、无法对多个任务进行链式调用。也就是说不能让第二个任务获取第一个任务执行完成后的结果后再去执行,它的执行是无法指定先后顺序的;3、无异常处理机制。Future接口中没有异常处理的方法,所以当Futrue中的任务原创 2021-12-17 09:53:12 · 1950 阅读 · 0 评论 -
浅谈ForkJoin
文章目录一、ForkJoin是什么?它能用来实现什么功能?二、ForkJoin的实现原理三、ForkJoin的简单使用一、ForkJoin是什么?它能用来实现什么功能?二、ForkJoin的实现原理三、ForkJoin的简单使用在这里插入代码片...原创 2021-12-09 15:55:27 · 345 阅读 · 0 评论 -
浅谈ReentrantReadWriteLock
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-11-29 17:23:17 · 335 阅读 · 0 评论 -
浅谈CyclicBarrier
文章目录一、CyclicBarrier是什么?它的作用是什么?二、CyclicBarrier的实现原理是什么?三、CyclicBarrier和CountDownLatch有什么区别?四、CyclicBarrier的简单实现一、CyclicBarrier是什么?它的作用是什么?CyclicBarrier也是JUC包为处理多线程情况下的某些场景所创建的一个工具类。一般都将其译为:循环栅栏。它主要的功能是对多个线程进行阻塞,直至满足栅栏设定的阈值,才会对阻塞的所有线程进行唤醒放行操作。当然循环也是一个很重原创 2021-11-29 10:24:38 · 196 阅读 · 0 评论 -
浅谈Semaphore
文章目录一、Semaphore是什么?主要作用是什么?二、Semaphore的实现原理是什么?三、Semaphore的简单使用一、Semaphore是什么?主要作用是什么?Semaphore简称信号量,它是JUC包下面对限流提供的一种解决方案。也就是说使用它后,可以保证在同一时间内只能有规定数量的任务可以执行,其它任务进入等待状态。二、Semaphore的实现原理是什么?Semaphore的阻塞原理和ReentrantLock的阻塞原理类似,主要区别的地方有两点:1、Semaphore的原创 2021-11-25 11:31:40 · 716 阅读 · 0 评论 -
浅谈ReentrantLock
文章目录一、ReentrantLock是用来做什么的?二、ReentrantLock的实现原理是什么?三、ReentrantLock对比于Synchronized有哪些优缺点?一、ReentrantLock是用来做什么的?二、ReentrantLock的实现原理是什么?三、ReentrantLock对比于Synchronized有哪些优缺点?...原创 2021-11-23 10:07:23 · 601 阅读 · 0 评论 -
浅谈synchronized
文章目录一、synchronized的作用二、synchronized中的几种状态三、synchronized的锁升级原理四、锁升/降级的注意点一、synchronized的作用synchronized可以给方法和代码块加锁,保证该方法或者该断代码块同一时间智能有同一个线程访问,从而避免了线程安全问题。二、synchronized中的几种状态被synchronized加锁的对象中会有五种状态:0(00):轻量级锁状态,该状态下的线程只会进行cas自旋,而不会使用到monitor进行从用户原创 2021-11-11 18:11:29 · 369 阅读 · 0 评论 -
Java如何处理并发情况下数据重复插入的问题
笔者这段时间在做第三方用户接入的时候碰到了一个问题:由于自身的系统是在第三方发送请求的时候直接将第三方的账号数据存入数据库的,所以当页面出现多个请求并发执行的时候,会出现用户数据重复插入的问题,之后笔者尝试了几种方式最终解决了这个问题,在此记录一下。目录一、单台服务器的处理方案二、多台服务器环境下的处理方案一、单台服务器的处理方案这种情况是最简单的一种情况,笔者的处理方法是给插入数据的代码块加锁,这样就能保证同一时间只能有一个线程访问该段代码快,这样只要在代码块的开头加上有无相同数据的判断,就.原创 2021-05-23 19:00:18 · 10215 阅读 · 2 评论 -
BIO、NIO、AIO总结
笔者之前学习Tomcat源码的时候,有听到过Tomcat有使用过两种IO模式,一种是BIO,另外一种是NIO。当时并不理解这两者之间有什么区别,后面查了些文档,才明白了些许,在此记录一下。目录一、什么是IO?二、什么是同步异步?三、什么是阻塞非阻塞?四、什么是BIO?五、什么是NIO?六、什么是AIO?阐述几者之间的区别前,先介绍一下IO、同步异步、阻塞非阻塞的念。一、什么是IO?IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个.原创 2021-04-23 15:36:32 · 84 阅读 · 0 评论 -
线程池--CountDownLatch
今天碰到了个比较棘手的问题,就是存在有几个运行缓慢的任务,需要分线程同时处理来稍微提升一些速度,但是这一个事物必须要等这些线程全部执行完获取到相应的数据后才能执行下一步,所以就引出了今天要提的一个东西CountDownLatch,通过它就能实现上述场景下面是部分代码实现://创建一个核心线程数为4的线程池ExecutorService executorService = new ThreadPoolExecutor(4, 10, 60L, TimeUnit.SECONDS, .原创 2021-03-19 00:46:32 · 309 阅读 · 0 评论