![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
java并发编程
多线程、线程池
我不是攻城狮
越努力越幸运
展开
-
ForkJoinPool(并行计算)
ForkJoinPool 是基于工作窃取(Work-Stealing)算法实现的线程池,ForkJoinPool 中每个线程都有自己的工作队列,用于存储待执行的任务。当一个线程执行完自己的任务之后,会从其他线程的工作队列中窃取任务执行,以此来实现任务的动态均衡和线程的利用率最大化。3、每一个线程都可以进行任务窃取,提高线程处理任务的能力。1、自动分治任务(fork)和合并任务结果(join)。4、线程之间通过消费等待模型并行处理任务。fork()+compute()模式。fork()+fork()模式。原创 2020-03-07 00:41:28 · 138 阅读 · 0 评论 -
ArrayBlockingQueue和LinkedBlockingQueue的区别
LinkedBlockingQueue实现的队列中的锁是分离的,即生产用的是putLock,消费是takeLock。LinkedBlockingQueue实现的队列中可以不指定队列的大小,但是默认是Integer.MAX_VALUE。ArrayBlockingQueue实现的队列中的锁是没有分离的,即生产和消费用的是同一个锁。ArrayBlockingQueue实现的队列中必须指定队列的大小。LinkedBlockingQueue基础数据结构 是链表。原创 2020-03-07 00:29:27 · 379 阅读 · 0 评论 -
LinkedBlockingQueue
基于等待通知模型的的队列,先入先出,既有有界和无界。入队和出队各自拥有自己的可重入的锁。LinkedBlockingQueue结合线程池使用实现并行业务任务。原创 2020-03-07 00:04:24 · 269 阅读 · 0 评论 -
ArrayBlockingQueue
使用提示:ArrayBlockingQueue结合线程池一起使用实现并行业务处理的需求非常高效,ArrayBlockingQueue#take取出的对象用作null表示等待处理。(FIFO)的原则,它是一个基于。基础数据结构Object[]原创 2020-03-06 23:07:22 · 294 阅读 · 2 评论 -
ConcurrentHashMap原理(1.8)
基本约定:sizeCtl : 默认为0,用来控制table的初始化和扩容操作,具体应用在后续会体现出来。 -1 代表table正在初始化 -N 表示有N-1个线程正在进行扩容操作 其余情况: 1、如果table未初始化,表示table需要初始化的大小。 2、如果tab...原创 2020-03-06 18:13:41 · 175 阅读 · 1 评论 -
创建线程的四种方式
原创 2024-05-23 22:54:59 · 114 阅读 · 0 评论 -
守护线程
原创 2024-05-23 22:54:10 · 85 阅读 · 0 评论 -
线程的状态
原创 2024-05-23 22:53:09 · 102 阅读 · 0 评论 -
Synchronized原理
原创 2020-06-11 13:25:47 · 193 阅读 · 0 评论 -
Threadlocal InheritableThreadLocal TransmittableThreadLocal
原创 2023-04-11 17:07:15 · 84 阅读 · 0 评论 -
线程池原理
corePoolSize:表示线程池保有的最小线程数。(有些项目很闲,但是也不能把人都撤了,至少要留 corePoolSize 个人坚守阵地。)maximumPoolSize:表示线程池创建的最大线程数。(当项目很忙时,就需要加人,但是也不能无限制地加,最多就加到 maximumPoolSize 个人。当项目闲下来时,就要撤人了,最多能撤到 corePoolSize 个人)。keepAl...原创 2020-03-28 17:35:23 · 250 阅读 · 0 评论 -
CyclicBarrier(并发任务调度)
线程执行调度任务作业时,每次屏障+1,直到到达公共屏障点才可以继续执行公共屏障的任务调度,如果无法到达公共屏障点直接线程直接堵塞并且超时。使用建议:并行任务调度合并计算可以使用,但是建议只做面试准备,实际很难保证所有任务调度完成。允许线程之间互相等待,知道所有线程都到达公共屏障点才可以继续往下执行。原创 2020-03-26 18:13:09 · 243 阅读 · 0 评论 -
volatile
原创 2020-03-27 16:36:21 · 470 阅读 · 0 评论 -
CountDownLatch(并发任务调度)
需要异常处理,在finally之后必须保证计数器-1,这样线程不管是否异常都可以保证计数器及时-1。一个线程等待线其他线程处理完所有调度作业后,合并计算之后计数归零才会往下执行,否则抛出中断异常并且堵塞。缺点:并发任务调度处理业务过程中,计数器没有-1的情况。适用于:并发任务调度处理,调度任务之间并发执行。原创 2020-03-26 17:23:31 · 184 阅读 · 0 评论 -
StampedLock认识
1、支持乐观读锁、悲观读锁、悲观写锁三种锁粒度。1-1、乐观读锁(tryOptimisticRead):多线程情况下,支持多线程去读同时少量的去写,弊端很明显:当发生多线程去读同时 又写的情况下,数据无法保证一致性。1-2、悲观读锁(readLock):即是共享读,支持多线程同时去读。当发生其中一个线程被写锁独占的时候,其他线程全部等待。1-3、悲观写锁(writeLock)...原创 2020-03-26 16:50:26 · 217 阅读 · 0 评论 -
Semaphore(并行任务调度)
init():设置计数器的初始值。 down():计数器的值减 1;如果此时计数器的值小于 0,则当前线程将被阻塞,否则当前线程可以继续执行。 up():计数器的值加 1;如果此时计数器的值小于或者等于 0,则唤醒等待队列中的一个线程,并将其从等待队列中移除。static final Semaphore s = new Semaphore(1);//初始化...原创 2020-03-26 14:31:24 · 185 阅读 · 0 评论 -
jmmhappen-before原则
单线程 happen-before原则:在同一个线程中,书写在前面操作 happen-before后面操作。 锁happen-before原则:同一个锁unlock操作happen-before此锁lock操作。 volatilehappen-before原则:对一个 volatile变量写操作 happen-before对此变量任意操作(当然也包括写操作了)。 happen-before传递性原则:如果 A操作 happen-beforeB操作,B操作ha原创 2020-03-11 10:17:08 · 212 阅读 · 0 评论 -
ReentrantLock原理
原理:原创 2017-05-11 09:27:13 · 679 阅读 · 0 评论