JUC
Posted doyi111
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JUC相关的知识,希望对你有一定的参考价值。
举例说明集合类是不安全的:
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的主要内容,如果未能解决你的问题,请参考以下文章