J.U.C之AQS—CountDownLatch 发表于 2018-08-02 | 更新于: 2018-08-02 | 分类于 Java之并发编程 | 阅读次数: 字数统计: 1,099 字 | 阅读时长 ≈ 5 分钟 概述它是一个同步辅助类,通过它可以在一个线程(线程间会轮换)执行countdown() -> count值减至0的期间,保证其他线程会调用await()一直阻塞等待,最后等待的线程执行resume(),所有线程再一起执行另一个实务操作。其中有一个原子性的且不会被重置的计数器以保证上述的实现。 阅读全文 »
AQS介绍 发表于 2018-08-02 | 更新于: 2018-08-02 | 分类于 Java之并发编程 | 阅读次数: 字数统计: 1,998 字 | 阅读时长 ≈ 8 分钟 概述AQS是J.U.C中的一个非常重要的类。J.U.C是java.util.concurrent的首字母简称。而AQS是J.U.C下locks包的一个抽象类。 阅读全文 »
并发容器-J.U.C之线程安全集合 发表于 2018-08-02 | 更新于: 2018-08-02 | 分类于 Java之并发编程 | 阅读次数: 字数统计: 965 字 | 阅读时长 ≈ 4 分钟 copyOnWriteArrayList 线程写操作时复制,当有新元素添加到copyOnWriteArrayList时,它先从原有的数组中拷贝出一份,在新开辟出的新数组中写入,写完后再将原数组指向新数组。其操作都是在锁的域中,防止在多线程中复制出多个副本出来,导致原数组指向错误。 特点: 由于写操作需进行复制操作,耗用内存;当元素内容过多时,该复制操作会占用非常多的内存,导致minor-GC,甚至full-GC。 虽然最终会保持一致性,但不能用于实时读的操作。 读写分离,且适合读多写少的场景。 若add或set的数据不清楚或过多,要慎用! 读时不加锁,写时加锁。 阅读全文 »
同步容器 发表于 2018-08-02 | 更新于: 2018-08-02 | 分类于 Java之并发编程 | 阅读次数: 字数统计: 2,058 字 | 阅读时长 ≈ 10 分钟 本节内容不仅丰富而且十分有趣实用~ 概述 同步容器大致分为两类: 由List发展来的Vector、Stack;由HashMap发展来的HashTable(其中K,V均不能为null) Collections工具类提供的静态工厂方法 –> 均为synchronizedXXXX(List/Set/Map)的模样。 阅读全文 »
线程不安全——Part-2 发表于 2018-08-02 | 更新于: 2018-08-02 | 分类于 Java之并发编程 | 阅读次数: 字数统计: 453 字 | 阅读时长 ≈ 2 分钟 Collections部分 一般情况下,我们使用ArrayList、HashSet、HashMap是在方法中定义局部变量,此时由于堆栈封闭的特性,自然不会有线程安全问题。但是,当将其定义为静态域中,且未做线程安全措施时,极有可能会导致多线程并发错误。 阅读全文 »