码迷,mamicode.com
首页 > 其他好文 > 详细

JUC(2)

时间:2020-03-23 00:20:15      阅读:52      评论:0      收藏:0      [点我收藏+]

标签:cti   共享   分离   资源   vector   java   数据一致性   idt   因子   

举例说明集合类是不安全的:

list不安全:

技术图片

Vector线程安全  但是要尽量少用Vector  性能慢

ArrayList线程不安全 读写效率提升 但是数据一致性下降  扩容为原来的一半

Collections.synchronizedList(new ArrayList<>());线程安全  

new CopyOnWriteArrayList<>();(有逼格)  读写分离的思想

技术图片

HashSet不安全   底层是hashmap key是存的值 ,value是一个固定的Object

HashMap不安全   底层是:数组+链表+红黑树      Node类型的节点 Node里面存 K-V  new HashMap(initialCapacity,负载因子) 扩容为原来的一倍

========================================================================

Callable  第三种多线程的方法

FutureTask即实现了Runnable 在构造方法中又有Callable 所以可以用FutureTask来实现Callable和Runnable之间链接的桥梁(Java多态的思想 传一个参数代表传了一堆)

技术图片

 

get方法请放在最后一行

不管有几个线程调用同一个FutureTask对象,都只会调用一次

=================================================

 * CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞。
 * 其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞),
 * 当计数器的值变为0时,因await方法阻塞的线程会被唤醒,继续执行。

技术图片

===================================================

CyclicBarrier  做加法:

技术图片

 

================================================

semaphore

 在信号量上我们定义两种操作:
 * acquire(获取) 当一个线程调用acquire操作时,它要么通过成功获取信号量(信号量减1),
 *       要么一直等下去,直到有线程释放信号量,或超时。
 * release(释放)实际上会将信号量的值加1,然后唤醒等待的线程。
 * 
 * 信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制。

如果把semaphore换成1,相当于Synchronized

 技术图片

 

 ================================================

ReadWriteLock

技术图片

===============================

技术图片

 

 技术图片技术图片

 

JUC(2)

标签:cti   共享   分离   资源   vector   java   数据一致性   idt   因子   

原文地址:https://www.cnblogs.com/doyi111/p/12549299.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!