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.concurrent.CopyOnWriteArrayList; /*
* CopyOnWriteArrayList/CopyOnWriteArraySet: "写入并复制"
注意:添加操作多时,效率低,因为每次添加时都会进行复制,
开销非常大,并发迭代操作多时可以选择
*/
public class TestCopyOnWriteArrayList {
public static void main(String[] args) {
HelloThread ht = new HelloThread();
for (int i = 0; i < 10; i++) {
new Thread(ht).start();
}
}
} class HelloThread implements Runnable {
//private static List<String> list = Collections.synchronizedList(new ArrayList<String>());
//CopyOnWriteArrayList写入并复制,每次写入时都会复制
private static CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
static {
list.add("AA");
list.add("BB");
list.add("CC");
} @Override
public void run() {
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
list.add("AA");
}
}
}

CountDownLatch:闭锁

1.CountDownLatch 一个同步辅助类,

在完成一组正在其他线程中执行的操作 之前, 它允许一个或多个线程一直等待。

2.闭锁可以延迟线程的进度直到其到达终止状态,闭锁可以用来确保某些活
     动直到其他活动都完成才继续执行:
                             ① 确保某个计算在其需要的所有资源都被初始化之后才继续执行;
                             ②确保某个服务在其依赖的所有其他服务都已经启动之后才启动;
                             ③等待直到某个操作所有参与者都准备就绪再继续执行

TestCountDownLatch

package com.aff.juc;
import java.util.concurrent.CountDownLatch; /*
CountDownLatch:闭锁,在完成某些运算时,只有其他所有线程运算全部完成时,当前运算才会继续运行
*/
public class TestCountDownLatch {
public static void main(String[] args) {
final CountDownLatch latch = new CountDownLatch(5);
LetchDemo ld = new LetchDemo(latch);
long start = System.currentTimeMillis();
for (int i = 0; i < 5; i++) {
new Thread(ld).start();
}
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
long end = System.currentTimeMillis();
System.out.println("耗费时间:" + (end - start));
}
} class LetchDemo implements Runnable {
private CountDownLatch latch; public LetchDemo(CountDownLatch latch) {
this.latch = latch;
} @Override
public void run() {
synchronized (this) {
try {
for (int i = 0; i < 50000; i++) {
if (i % 2 == 0) {
System.out.println(i);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
latch.countDown();
}
}
}
}

CopyOnWriteArrayList(写入并复制) & CountDownLatch(闭锁)的更多相关文章

  1. 写入时复制(CopyOnWrite)

    一.CopyOnWrite 思想 写入时复制(CopyOnWrite,简称COW)思想是计算机程序设计领域中的一种通用优化策略.其核心思想是,如果有多个调用者(Callers)同时访问相同的资源(如内 ...

  2. 多线程高并发编程(9) -- CopyOnWrite写入时复制

    CopyOnWrite写入时复制 CopyOnWrite,即快照模式,写入时复制就是不同线程访问同一资源的时候,会获取相同的指针指向这个资源,只有在写操作,才会去复制一份新的数据,然后新的数据在被写操 ...

  3. 6. CountDownLatch 闭锁

    package com.gf.demo05; import java.util.concurrent.CountDownLatch; /** * CountDownLatch : 闭锁,在完成某些操作 ...

  4. juc并发工具类之CountDownLatch闭锁

    import java.util.concurrent.CountDownLatch; /** * 闭锁: 在进行某些运算时, 只有其他所有线程的运算全部完成,当前运算才继续执行(程序流中加了一道栅栏 ...

  5. 同步机制之--java之CountDownLatch闭锁

    CountDownLatch闭锁 1.类介绍 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待.用给定的计数初始化 CountDownLatch.CountDown ...

  6. CountDownLatch闭锁

    CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 闭锁可以延迟线程的进度直到其到达终止状态,闭锁可以用来确保某些活动直到其他活动都完 ...

  7. 【同步工具类】CountDownLatch闭锁任务同步

    [同步工具类]CountDownLatch闭锁任务同步 转载:https://www.cnblogs.com/yangchongxing/p/9214284.html 打过dota的同学都知道,多人一 ...

  8. File相关的读取和写入以及复制

    import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileI ...

  9. CountDownLatch(闭锁)

    一.闭锁(Latch)    闭锁(Latch):一种同步方法,可以延迟线程的进度直到线程到达某个终点状态.通俗的讲就是,一个闭锁相当于一扇大门,在大门打开之前所有线程都被阻断,一旦大门打开所有线程都 ...

随机推荐

  1. IO与反射机制总结

    IO与反射机制全面总结 一.file类:属于java.io包中kkb 作用:操作文件或目录 file既可以表示文件,也可以表示目录,也可以表示盘符.利用他可以用来对文件进行操作. file中常用的构造 ...

  2. 请不要浪费你的生命,一文多发推广就用它(OpenWrite)

    你我的共同困惑 你是否跟我一样?刚开始尝试写作,自己没有名气,有以下几个困惑: 想要推广自己,想在多个平台发文? 多平台发文之后,想要看各个平台的流量如何? 有了流量,想要引流用户到自己的网站? 网站 ...

  3. cmake安装jsoncpp

    cd jsoncpp- mkdir -p build/debug cd build/debug cmake -DCMAKE_BUILD_TYPE=release -DBUILD_STATIC_LIBS ...

  4. Kubernetes实战总结

    >>> 目录 <<< 一.概述二.核心组件三.基本概念四.系统架构五.镜像制作六.服务编排七.持续部署八.故障排查 >>> 正文 << ...

  5. Dynamics 9.0 安装好后 公告出现 提示:出现错误。 请稍等片刻,然后重试。 如果问题仍然存在,请与管理员联系。

    此问题为系统的Bug,示例图如下: 解决方案为修改存储过程 p_RetrievePosts,将startDate参数的默认值改成 1900-01-01,endDate参数的默认值改成 9999-12- ...

  6. matlab数值数据和变量名

    1.2MATLAB数值数据 l  数值数据类型的分类 l  数值数据的输出格式 l  常用数学函数内部函数 1.数值数据类型的分类 l  整型 l  浮点型 l  复数型 (1)整型 1.数值数据类型 ...

  7. Spring Cloud学习 之 Spring Cloud Hystrix(基础知识铺垫)

    Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 文章目录 前述: 快速入门: 命令模式: RxJava: 前述: ​ 在微服务架构中, ...

  8. 【Linux】1 创建目录:mkdir

    mkdir命令用于创建目录,如同一路径下创建单个或多个目录.递归创建目录,但同路径下不能创建同名目录,且目录名区分大小写. [命令] mkdir [用途] 创建目录(单个目录/多个目录) [语法] m ...

  9. 阿里面试居然跟我扯了半小时的CyclicBarrier

    一个大腹便便,穿着格子衬衫的中年男子,拿着一个贴满Logo的Mac向我走来,看着稀少的头发,我心想着肯定是顶级技术大牛吧!但是我也是一个才华横溢的人,稳住我们能赢. 面试官:您好,先做一下自我介绍吧! ...

  10. 推荐一款 python 管理工具:anaconda

    1.jpg 2.jpg 3.jpg 4.jpg 5.jpg 6.jpg 7.jpg 8.jpg 9.jpg 10.jpg 11.jpg 12.jpg 13.jpg 14.jpg 15.jpg 16.j ...