博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JCTools简介
阅读量:5865 次
发布时间:2019-06-19

本文共 2297 字,大约阅读时间需要 7 分钟。

JCTools是一款对jdk并发数据结构进行增强的并发工具,主要提供了map以及queue的增强数据结构。原来netty还是自己写的MpscLinkedQueueNode,后来新版本就换成使用JCTools的并发队列了。

增强map

  • ConcurrentAutoTable(后面几个map/set结构的基础)
  • NonBlockingHashMap
  • NonBlockingHashMapLong
  • NonBlockingHashSet
  • NonBlockingIdentityHashMap
  • NonBlockingSetInt

增强队列

  • SPSC - Single Producer Single Consumer (Wait Free, bounded and unbounded)
  • MPSC - Multi Producer Single Consumer (Lock less, bounded and unbounded)
  • SPMC - Single Producer Multi Consumer (Lock less, bounded)
  • MPMC - Multi Producer Multi Consumer (Lock less, bounded)

maven

org.jctools
jctools-core
2.1.0

ConcurrentAutoTable

替代AtomicLong,专门为高性能的counter设计的。只有几个方法

public void add( long x );public void decrement();public void increment();public void set( long x );public long get();public int  intValue();public long longValue();public long estimate_get();

对比AtomicLong主要是操作之后没有立即返回

public final long incrementAndGet();public final long decrementAndGet()

NonBlockingHashMap

NonBlockingHashMap是对ConcurrentHashMap的增强,对多CPU的支持以及高并发更新提供更好的性能。

NonBlockingHashMapLong是key为Long型的NonBlockingHashMap。
NonBlockingHashSet是对NonBlockingHashMap的简单包装以支持set的接口。
NonBlockingIdentityHashMap是从NonBlockingHashMap改造来的,使用System.identityHashCode()来计算哈希
NonBlockingSetInt是一个使用CAS的简单的bit-vector

原来是

// --- hash ----------------------------------------------------------------  // Helper function to spread lousy hashCodes.  Throws NPE for null Key, on  // purpose - as the first place to conveniently toss the required NPE for a  // null Key.  private static final int hash(final Object key) {    int h = key.hashCode();     // The real hashCode call    h ^= (h>>>20) ^ (h>>>12);    h ^= (h>>> 7) ^ (h>>> 4);    h += h<<7; // smear low bits up high, for hashcodes that only differ by 1    return h;  }

改为

// --- hash ----------------------------------------------------------------  // Helper function to spread lousy hashCodes  private static final int hash(final Object key) {    int h = System.identityHashCode(key); // The real hashCode call    // I assume that System.identityHashCode is well implemented with a good    // spreader, and a second bit-spreader is redundant.    //h ^= (h>>>20) ^ (h>>>12);    //h ^= (h>>> 7) ^ (h>>> 4);    return h;  }

doc

转载地址:http://ahynx.baihongyu.com/

你可能感兴趣的文章
什么是DDOS攻击?怎么防御?
查看>>
状态模式(State Pattern)
查看>>
log4j日志框架学习
查看>>
function 与 => 的区别
查看>>
TYVJ P1077 有理逼近 Label:坑,tle的好帮手 不懂
查看>>
面试题:缓存Redis与Memcached的比较 有用
查看>>
EXCEL自动撤销合并单元格并填充相应内容(转帖)
查看>>
Python3学习笔记10-条件控制
查看>>
Nginx 1.2.6 稳定版发布
查看>>
黄聪:如何使用CodeSmith批量生成代码(原创系列教程)
查看>>
HDOJ---1421 搬寝室[DP]
查看>>
JS 中的== 与 ===
查看>>
ES6 - 收藏集 - 掘金
查看>>
13.11. this is incompatible with sql_mode=only_full_group_by
查看>>
Python Module_openpyxl_处理Excel表格
查看>>
css动画实现div内图片逆时针旋转
查看>>
CSS的工作过程
查看>>
为什么码农要了解业务?
查看>>
微软整合实验(七):布署Exchange2010 Mailbox高可用(DAG)
查看>>
spring定时器----JobDetailBean
查看>>