文档章节

JCTools简介

go4it
 go4it
发布于 2017/09/04 22:22
字数 441
阅读 18
收藏 1

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

		<dependency>
            <groupId>org.jctools</groupId>
            <artifactId>jctools-core</artifactId>
            <version>2.1.0</version>
        </dependency>

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

© 著作权归作者所有

go4it
粉丝 83
博文 1004
码字总数 968290
作品 0
深圳
私信 提问
Caffeine 2.3.4 发布,Java 8的高性能缓存库

Caffeine 2.3.4 发布了,Caffeine 是一个 Java 8的高性能缓存库。 更新内容: Cache Fixed live-lock when write buffer grows to capacity (#127, JCTools/JCTools#135) Ensure back pressu......

淡漠悠然
2016/11/03
2.1K
4
turbo-rpc 0.0.5 发布,大幅提高性能

turbo-rpc 是一款速度超凡的异步响应式 RPC 框架 功能特点: 仅支持异步调用, Service 接口所有 public 方法返回值都必须为 CompletableFuture 配置定义在 Service 接口上, 而非实现类上, 方法...

鲁小憨
2018/03/31
372
0
Netty 4.1.2.Final 和 4.0.38.Final 发布

Netty 4.1.2.Final 和 4.0.38.Final 发布了。 4.0.38 和 4.1.2.Final 的共同更新: Be able to use Netty in JDK9 (#5475), (#5474 ), (#5473) Allow to inject RejectedExecutionHandler f......

愚_者
2016/07/03
2.8K
11
异步响应式 RPC 框架 turbo-rpc 0.0.4 发布,升级组件

turbo-rpc 是一款速度超凡的异步响应式RPC框架. 功能特点: 仅支持异步调用, Service接口所有public方法返回值都必须为CompletableFuture. 配置定义在Service接口上, 而非实现类上, 方法实现者...

鲁小憨
2018/03/21
736
2
RxJava 1.0.14 发布,现已提供下载

.Net响应式编程框架Rx的Java版本开源实现,是一种JVM语言,有Groovy, Clojure, Scala and JRuby版本的实现 此版本更新内容如下: Pull 2963 Set of standard producers and updated queue im...

oschina
2015/08/17
2.6K
1

没有更多内容

加载失败,请刷新页面

加载更多

基础工具类

package com.atguigu.util;import java.sql.Connection;import java.sql.SQLException;import java.util.Properties;import javax.sql.DataSource;import com.alibaba.druid......

architect刘源源
今天
43
0
P30 Pro劲敌!DxO官宣新机:排行榜又要变

5月26日晚间,DxOMark官方推特预告,将在5月27日公布一款新机型的DxOMark评分,猜猜是哪款? 网友猜想的机型有:红米K20、谷歌Pixel 3a、索尼Xperia 1、诺基亚9 PureView等。 DxOMark即将公布...

linux-tao
昨天
15
0
Ubuntu18.04.2窗口过小不能自适应(二次转载)

解决Ubuntu在虚拟机窗口不能自适应 2018年09月06日 16:20:08 起不了名儿 阅读数 855 此博文转载:https://blog.csdn.net/nuddlle/article/details/77994080(原地址) 试了很多办法这个好用 ...

tahiti_aa
昨天
2
0
死磕 java同步系列之CountDownLatch源码解析

问题 (1)CountDownLatch是什么? (2)CountDownLatch具有哪些特性? (3)CountDownLatch通常运用在什么场景中? (4)CountDownLatch的初始次数是否可以调整? 简介 CountDownLatch,可以...

彤哥读源码
昨天
6
0
Nginx提供下载apk服务

有时候我们可能需要提供文件或者其他apk下载链接,通过 nginx 配置可以很简单地实现。 server {    listen 80;    server_name download.xxx.com;    root app;    locati...

Jack088
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部