countdownlatch

JAVA 并发体系概览

安稳与你 提交于 2020-04-10 17:40:26
Java并发包主要有以下部分构成: 同步对象 主要提供多个线程以何种方式进行通信协作 执行器 管理多线程,提供线程运行入口 锁 控制线程访问资源的顺序 原子操作 对Java的基本类型进行了封装,对integer等这些包装类提供了原子操作 并发框架 为了简化并行编程的复杂性,Java或者其他公司定义的并发框架 以上对相关的类有一个大致的概览,下面主要大概的讲述一下同步对象的使用场景 Semaphore : 信号量:信号量通过计数器控制对共享资源的访问。如果计数器大于0,访问允许,如果为0,访问是拒绝的。计数器计数允许访问共享资源的许可证,因此,为了访问资源,线程必须获取信号量的访问许可。通常,为了使用信号量,希望访问共享资源的线程尝试取得许可。如果信号量的计数器大于0,就表明线程取得了许可证,这会导致信号量的计数减小;否则线程会被阻塞,直到能够获取许可证为止。当线程不需要访问共享资源时,释放许可证,从而增大信号量的计数。如果还有另外的一个线程正在等待许可证,该线程将在这一刻取得许可证 CountDownLatch : 有时候希望线程进行等待,直到发生一个或多个事件为止。为了处理这类情况,并发API提供了CountDownLatch类。CountDownLatch在初始创建时带有时间数量计数器,在释放锁存器之前,必须发生指定数量的时间。每次发生一个事件时,计数器递减。当计数器达到0时

清明花了几天总结了多线程的知识点

家住魔仙堡 提交于 2020-04-07 09:53:11
前言 只有光头才能变强。 文本已收录至我的GitHub精选文章,欢迎Star : https://github.com/ZhongFuCheng3y/3y 在上周总结了一篇「工作中常用到的Java集合类」,反响还不错。这周来写写Java另一个重要的知识点:「 多线程 」 多线程大家在初学的时候,对这个知识点应该有不少的疑惑的。我认为主要原因有两个: 多线程在初学的时候不太好学,并且一般写项目的时候也很少用得上(至少在初学阶段时写的项目基本不需要自己创建线程)。 多线程的知识点在面试经常考,多线程所涉及的知识点非常多,难度也不低。 这就会给人带来一种感觉「 这破玩意涉及的东西是真的广,平时也不怎么用,怎么面试就偏偏爱问这个鬼东西 」 不多BB,我要开始了。 为什么使用多线程? 首先,我们要明确的是「为什么要使用多线程」,可能有人会认为「 使用多线程就是为了加快程序运行的速度啊 」。如果你是这样回答了,那面试官可能会问你「那多线程是怎么加快程序运行速度的?」 于我的理解:使用多线程最主要的原因是 提高系统的资源利用率 。 现在CPU基本都是多核的,如果你只用单线程,那就是只用到了一个核心,其他的核心就相当于空闲在那里了。 厕所的坑位有5个,如果只用一个坑位,那不是很亏?比如现在我有5个人要上厕所。 在单线程的时候:进去一个人解决要10分钟,然后后面的人都得等一个坑位

ThreadPoolTaskExecutor 中 corePoolSize vs. maxPoolSize

三世轮回 提交于 2020-04-06 09:40:59
1. 概览 Spring中的 ThreadPoolTaskExecutor 是一个 JavaBean ,提供围绕 java.util.concurrent.ThreadPoolExecutor 的抽象实例,并作为Spring 中 org.springframework.core.task.TaskExecutor 暴露出来. 此外,它可以通过 corePoolSize、maxPoolSize、queueCapacity、allowCoreThreadTimeOut 和 keepAliveSeconds 的属性进行高度配置。在本教程中,我们将查看 corePoolSize 和 maxPoolSize 属性。 2. corePoolSize vs. maxPoolSize 刚接触到这种抽象的用户可能很容易混淆这两个配置属性的区别。因此,让我们分别看一下。 2.1. corePoolSize corePoolSize 是在不超时情况下,保持活跃的最少线程数 。它是 ThreadPoolTaskExecutor 的一个可配置项。但是, ThreadPoolTaskExecutor* 抽象将该值的设置委托给底层的 java.util.concurrent.ThreadPoolExecutor 。为验证这一点,如果我们将 allowCoreThreadTimeOut 设置为 true

多线程 CountDownLatch

霸气de小男生 提交于 2020-04-06 02:56:02
import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; /** * 闭锁 * https://www.cnblogs.com/takumicx/p/9698867.html */ public class CountDownLatchTest { private static CountDownLatch countDownLatch; public static void main(String[] args) throws InterruptedException { int count = 10; // 初始化计数器值为10 countDownLatch = new CountDownLatch(count); // 开启10个子线程执行子任务 for (int i = 0; i < count; i++) { Thread thread = new Thread(new CountDownThread(countDownLatch, i)); thread.start(); } // 主线程等待,直到所有子任务完成 countDownLatch.await(); // 模拟主线程执行后续工作 TimeUnit.SECONDS.sleep(1); System.out

CopyOnWriteArrayList(写入并复制) & CountDownLatch(闭锁)

…衆ロ難τιáo~ 提交于 2020-04-04 12:52:49
ConcurrentHashMap: ①Java 5.0 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器 的性能。 ② ConcurrentHashMap 同步容器类是Java 5 增加的一个线程安全的哈希表。 对与多线程的操作,介于 HashMap 与 Hashtable 之间。 内部采用“锁分段” 机制替代 Hashtable 的独占锁。进而提高性能。 ③此包还提供了设计用于多线程上下文中的 Collection 实现: ConcurrentHashMap、ConcurrentSkipListMap、ConcurrentSkipListSet、 CopyOnWriteArrayList 和 CopyOnWriteArraySet。 当期望许多线程访问一个给 定 collection 时,ConcurrentHashMap 通常优于同步的 HashMap, ConcurrentSkipListMap 通常优于同步的 TreeMap。 当期望的读数和遍历远远 大于列表的更新数时,CopyOnWriteArrayList 优于同步的 ArrayList。 TestCopyOnWriteArrayList package com.aff.juc; import java.util.Iterator; import java.util

CountDownLatch、CyclicBarrier和Semaphore

不羁的心 提交于 2020-04-02 09:37:54
一.CountDownLatch用法 CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。 CountDownLatch的构造函数接收一个int类型的参数作为计数器,如果你想等待N个点完成,这里就传入N。 当我们调用一次CountDownLatch的countDown方法时,N就会减1,CountDownLatch的await会阻塞当前线程,直到N变成零。由于countDown方法可以用在任何地方,所以这里说的N个点,可以是N个线程,也可以是1个线程里的N个执行步骤。用在多个线程时,你只需要把这个CountDownLatch的引用传递到线程里。 其他方法 如果有某个解析sheet的线程处理的比较慢,我们不可能让主线程一直等待,所以我们可以使用另外一个带指定时间的await方法,await(long time, TimeUnit unit): 这个方法等待特定时间后,就会不再阻塞当前线程。join也有类似的方法。 注意:计数器必须大于等于0,只是等于0时候,计数器就是零,调用await方法时不会阻塞当前线程。CountDownLatch不可能重新初始化或者修改CountDownLatch对象的内部计数器的值

Java并发(思维导图)

北城以北 提交于 2020-04-01 01:47:18
1,线程状态转换 无限期等待: 限期等待: 线程生命流程: 2,实现方式 代码实现样例【三种方式】: package com.cnblogs.mufasa.demo2; import java.util.concurrent.Callable; public class test1_Runnable implements Runnable{ @Override public void run() { for(int i=0;i<50;i++){ System.out.println("当前线程:"+i); } } } class test2_Callable implements Callable<String> { private int num; public test2_Callable(){} public test2_Callable(int num){ this.num=num; } @Override public String call() throws Exception { for(int i=0;i<50;i++){ System.out.println(this.num+"线程:"+i); } return num+"线程已完成"; } } class test3_Thread extends Thread { private int num; public

面试刷题19:并发工具包有哪些工具?

喜夏-厌秋 提交于 2020-03-30 16:17:34
java.util.concurrent包提供了大量的并发工具。 大家好,我是李福春,今天的题目是: java提供的并发工具有哪些? 答:java.util.concurrent工具包中提供的工具分4大类。 一, 同步工具,CountDownLatch, CyclicBarrier , Semaphore ; 二, 并发安全容器, ConcurrentHashMap,ConcurrentSkipListMap, CopyOnWriteArrayList,CopyOnWriteArraySet; 三,并发安全队列,主要用在线程池上,ArrayBlockingQueue,SynchronousQueue,PriorityBlockingQueue; 四,并发线程池executor框架; 同步工具 semaphore 信号量,设置并发访问的线程数量。 一般要结对使用: try{s.acquire();}finally{s.release()} package org.example.mianshi.synctool; import java.util.concurrent.Semaphore; /** * 创建日期: 2020/3/30 14:24 * 描述: 信号量应用 * * @author lifuchun */ public class SemaphoreApp { public

ThreadPoolTaskExecutor 中 corePoolSize vs. maxPoolSize

你说的曾经没有我的故事 提交于 2020-03-30 10:06:55
1. 概览 Spring中的 ThreadPoolTaskExecutor 是一个 JavaBean ,提供围绕 java.util.concurrent.ThreadPoolExecutor 的抽象实例,并作为Spring 中 org.springframework.core.task.TaskExecutor 暴露出来. 此外,它可以通过 corePoolSize、maxPoolSize、queueCapacity、allowCoreThreadTimeOut 和 keepAliveSeconds 的属性进行高度配置。在本教程中,我们将查看 corePoolSize 和 maxPoolSize 属性。 2. corePoolSize vs. maxPoolSize 刚接触到这种抽象的用户可能很容易混淆这两个配置属性的区别。因此,让我们分别看一下。 2.1. corePoolSize corePoolSize 是在不超时情况下,保持活跃的最少线程数 。它是 ThreadPoolTaskExecutor 的一个可配置项。但是, ThreadPoolTaskExecutor* 抽象将该值的设置委托给底层的 java.util.concurrent.ThreadPoolExecutor 。为验证这一点,如果我们将 allowCoreThreadTimeOut 设置为 true

浅析Java中CountDownLatch用法

廉价感情. 提交于 2020-03-29 20:15:43
/** CountDownLatch类是一个同步计数器,构造时传入int参数,该参数就是计数器的初始值,每调用一次countDown()方法,计数器减1,计数器大于0 时,await()方法会阻塞程序继续执行 CountDownLatch如其所写,是一个倒计数的锁存器,当计数减至0时触发特定的事件。利用这种特性,可以让主线程等待子线程的结束。下面以一个模拟运动员比赛的例子加以说明。 */ import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CountDownLatchDemo { private static final int PLAYER_AMOUNT = 5; public CountDownLatchDemo() { // TODO Auto-generated constructor stub } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated