Java并发性和多线程
天高任鸟飞-海阔凭鱼跃
天高任鸟飞 海阔凭鱼跃
展开
-
LinkedBlockingQueue
import java.util.UUID;import java.util.concurrent.LinkedBlockingQueue;public class LinkedBlockingQueueTest { public static void main(String[] args) { try { LinkedBlockingQueue<String> linkedBlockingQueue = new LinkedBlock..原创 2022-02-03 22:47:27 · 766 阅读 · 0 评论 -
ArrayBlockingQueue
import java.util.UUID;import java.util.concurrent.ArrayBlockingQueue;public class ArrayBlockingQueueTest2 { public static void main(String[] args) { try { ArrayBlockingQueue<String> arrayBlockingQueue = new ArrayBlockingQ..原创 2022-02-03 22:11:42 · 503 阅读 · 0 评论 -
CompletionService:批量执行异步任务
我们思考下这个场景:从三个电商询价,然后保存在自己的数据库里。通过之前所学,我们可能这么实现。// 创建线程池ExecutorService executor = Executors.newFixedThreadPool(3);// 异步向电商 S1 询价Future<Integer> f1 = executor.submit( ()->getPriceByS1());// 异步向电商 S2 询价Future<Integer> f2 =转载 2021-01-14 11:15:16 · 274 阅读 · 0 评论 -
分布式锁(redis锁和zk锁)
锁:synchronized 在单JVM环境下没问题,在分布式环境下有问题使用redis加锁可能出现的问题:1)业务代码报错导致的redis锁没有释放 解决方案:把释放锁的代码放到finally中执行2)业务工程宕机导致redis锁没有释放 解决方案:增加超时时间。超时时间要使用redis自带的超时时间的方法,如果单独设置了锁后再设置超时时间,有可能这中间宕机导致锁释放不了3)业务执行时间超出锁的超时时间,导致锁失效问题(锁超时设置10秒,A线程进入方法,业务需要15秒,...原创 2020-10-20 14:44:39 · 455 阅读 · 0 评论 -
concurrenthashmap
jdk7 concurrenthashmapsegment数组,默认大小,最大大小segment中有成员变量hashentry数组,元素个数,阀值,modcount,默认大小hashtable 增加的是对象实例锁concurrenthashmap加的是分段锁,是以segment为单位。segment继承了ReentrantLock。segment 最大的数量是2的16次方,segment数组的大小是不变的,即便后面扩容也不变。concurrenthashmap是局部扩容。每个segment的容量最原创 2020-10-18 10:47:48 · 256 阅读 · 0 评论 -
有关线程池,你必须要知道的几个细节
1、 线程池中线程的排队优先级 线程池按以下行为执行任务 1). 当线程数小于核心线程数时,创建线程。 2). 当线程数大于等于核心线程数,且任务队列未满时,将任务放入任务队列。 3). 当线程数大于等于核心线程数,且任务队列已满 - 若线程数小于最大线程数,创建线程 - 若线程数等于最大线程数,抛出异常,拒绝任务 int c...原创 2020-09-21 01:28:22 · 655 阅读 · 0 评论 -
AQS同步队列器之一:使用和原理
一、简介 JDK1.5之前都是通过synchronized关键字实现并发同步,而JDK1.5以后Doug Lea大师开发了current包下的类,通过Java代码实现了synchronized关键字的语义。 然而在current包下的这些类的实现大部分都离不开一个基础组件----AQS(AbstractQueuedSynchronizer)也就是同步队列器。 AQS,AbstractQueuedSynchronizer,即队列同步器。它是构建锁或者其他同步组件的基础框架(如Reent转载 2020-07-23 03:29:43 · 579 阅读 · 0 评论 -
Java多线程之---用 CountDownLatch 说明 AQS 的实现原理
本文基于 jdk 1.8 。CountDownLatch 的使用前面的文章中说到了 volatile 以及用 volatile 来实现自旋锁,例如 java.util.concurrent.atomic 包下的工具类。但是 volatile 的使用场景毕竟有限,很多的情况下并不是适用,这个时候就需要 synchronized 或者各种锁实现了。今天就来说一下几种锁的实现原理。先来看...转载 2020-01-12 02:58:11 · 159 阅读 · 0 评论 -
Java并发性和多线程
牛人博客http://ifeve.com/java-concurrency-thread-directory/原创 2019-08-02 14:14:52 · 127 阅读 · 0 评论