Stella981 Stella981
4年前
ConcurrentHashMap介绍
在进行结构性修改,如put/remove/replace时都需要进行加锁,但是读取并未加锁,并发情况下,由于内存不同步问题,会导致一个线程的写操作并不会立即对另一个线程可见。这里ConcurrentHashMap通过volatile变量的内存可见性特性来保证一个线程的写操作立即被其他线程可见,每个方法在一开始都会读取count这个变量,该变量就是一个vola
Easter79 Easter79
4年前
SynchronousQueue 介绍
SynchronousQueue是一种特殊的阻塞队列,不同于LinkedBlockingQueue(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fvickyqi.com%2F2015%2F11%2F23%2FJDK%25E5%25B9%25B6%25E5%258F%2591%25E5%2
Stella981 Stella981
4年前
ConcurrentSkipListMap 介绍
ConcurrentSkipListMap在JDK并发工具类使用范围不是很广,它是针对某一特殊需求而设计的——支持排序,同时支持搜索目标返回最接近匹配项的导航方法。一般情况下开发者很少会使用到该类,但是如果你有如上的特殊需求,那么ConcurrentSkipListMap将是一个很好地解决方案。JavaCollectionsFramework中另一个
Stella981 Stella981
4年前
RabbitMQ介绍
一、什么是RabbitMQ!(https://oscimg.oschina.net/oscnet/15491fd9b2a136d20ba15e605c6294766d3.jpg)二、为什么要使用RabbitMQ?他解决了什么问题?!(https://oscimg.oschina.net/oscnet/fa6a1c6ab4693f21377
Stella981 Stella981
4年前
LinkedBlockingQueue 介绍
LinkedBlockingQueue是一个基于已链接节点的、范围任意的blockingqueue。此队列按FIFO(先进先出)排序元素。队列的头部是在队列中时间最长的元素。队列的尾部是在队列中时间最短的元素。新元素插入到队列的尾部,并且队列获取操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可
Stella981 Stella981
4年前
Redis 介绍
Redis的特点Redis本质上是一个KeyValue类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。 因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作,是已知性能最快的KeyValueDB。Redis的
Caomeinico Caomeinico
4年前
IPFS介绍
好买网(www.goodmai.com)在全球分布式文件系统领域,已经有许多人的尝试。一些系统已经取得了重大的成功,而很多却完全失败了。在学术尝试中,AFS6就是成功的例子,如今已经得到广泛的应用,然而,其他的7,?却没有得到相同的结果。在学术界之外,应用最广泛的是面向音视频媒体的点对点文件共享系统。最值得注意的是,Napster,KaZaA和B
Stella981 Stella981
4年前
PriorityBlockingQueue 介绍
PriorityBlockingQueue是一个基于优先级堆的无界的并发安全的优先级队列(FIFO),队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的Comparator进行排序,具体取决于所使用的构造方法。实现原理PriorityBlockingQueue通过使用堆这种数据结构实现将队列中的元素按照某种排序规则进行排序,从而改变先进先
Stella981 Stella981
4年前
ConcurrentLinkedQueue 介绍
在多线程编程环境下并发安全队列是不可或缺的一个重要工具类,为了实现并发安全可以有两种方式:一种是阻塞式的,例如:LinkedBlockingQueue;另一种即是我们将要探讨的非阻塞式,例如:ConcurrentLinkedQueue。相比较于阻塞式,非阻塞的最显著的优点就是性能,非阻塞式算法使用CAS来原子性的更新数据,避免了加锁的时间,同时也保证了数据的
Stella981 Stella981
4年前
CopyOnWriteArrayList 介绍
CopyOnWriteArrayList是ArrayList的一个线程安全的变体,其中所有可变操作(add、set等等)都是通过对底层数组进行一次新的复制来实现的。这一般需要很大的开销,但是当遍历操作的数量大大超过可变操作的数量时,这种方法可能比其他替代方法更有效。在不能或不想进行同步遍历,但又需要从并发线程中排除冲突时,它也很有用。“快照”风格的