`
raymond.chen
  • 浏览: 1436972 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

AtomicLongMap的使用

 
阅读更多

AtomicLongMap是Google Guava项目的一个类,它是线程安全、支持并发访问的。

 

public class AtomicLongMapTest {
    private static int threadCount = 10; //线程数
    private static int loopNum = 5; //循环次数
    private static String key = "count";
    private static ExecutorService executorService = Executors.newFixedThreadPool(threadCount);
    
    //AtomicLongMap	线程安全,支持并发  
    private static AtomicLongMap<String> atomicLongMap = AtomicLongMap.create();
    
    //倒计时计数器
    private static CountDownLatch countDownLatch;

    public static void main(String[] args)throws Exception{  
    	test1();
    	test0();
    }
    
    private static void test0()throws Exception{
    	for(int i=1; i<=5; i++){
    		atomicLongMap.put("key"+i, i);
    	}
    	System.out.println(atomicLongMap);
    	
    	System.out.println(atomicLongMap.containsKey("key1")); //是否存在指定key
    	System.out.println(atomicLongMap.get("key1")); //获取指定key的值
    	
    	System.out.println(atomicLongMap.getAndAdd("key1", 1));
    	System.out.println(atomicLongMap.addAndGet("key1", 1));
    	
    	System.out.println(atomicLongMap.getAndIncrement("key1")); //值递增
    	System.out.println(atomicLongMap.incrementAndGet("key1"));
    	
    	System.out.println(atomicLongMap.getAndDecrement("key1")); //值递减
    	System.out.println(atomicLongMap.decrementAndGet("key1"));

    	System.out.println(atomicLongMap.removeIfZero("key1")); //删除值为0的key
    	atomicLongMap.remove("key1"); //删除指定的key
    	atomicLongMap.removeAllZeros(); //删除所有值为0的key
    	
    	System.out.println(atomicLongMap.size()); //key的数量
    	System.out.println(atomicLongMap.sum()); //求所有key值的和
    	
    	atomicLongMap.clear(); //清空
    	System.out.println(atomicLongMap.isEmpty()); //判断是否为空
    }
    
    private static void test1()throws Exception{
    	countDownLatch = new CountDownLatch(threadCount); //state值=threadCount 
    	
    	for(int i=1; i<=threadCount; i++){
    		executorService.execute(new Runnable() {
				@Override
				public void run() {
					for(int i=0; i<loopNum; i++){
						long value = atomicLongMap.incrementAndGet(key);
						System.out.println(Thread.currentThread().getName() + ": " + value);
					}
					
	                countDownLatch.countDown(); //state值减1  
				}
			});
    	}

        //等待直到state值为0,再继续往下执行  
        countDownLatch.await();  
        
		System.out.println(atomicLongMap.get(key));
    	executorService.shutdown();
    }
}

 

分享到:
评论

相关推荐

    Guava 工程项目包 有实例

    - **计数器**:AtomicLongMap 和 Counter 类提供了一种线程安全的方式来统计和操作数据。 5. **其他实用工具** - **事件监听**:Guava 提供了 EventBus,一个简单的发布/订阅事件总线,方便组件间的通信。 - **...

    Parallel-Dijkstras:dijkstra的SSSP算法的并行实现,使用来自CPSC 5600的计数减少类

    例如,可以创建一个全局的距离数组,每个线程在更新完其负责的顶点后,使用`AtomicIntegerArray`或`AtomicLongMap`(如`com.google.common.collect.MapMaker`库提供的)进行原子操作,确保更新的正确性,避免数据...

    JDK1.7API文档中文版CHM

    6. **并发工具增强**:加入了`java.util.concurrent.atomic`包中的新原子类,如`AtomicIntegerArray`和`AtomicLongMap`,以及`Phaser`,一个用于协调多个任务执行的同步工具。 7. **字符串操作优化**:增加了`...

    java 1.8 API 中文参考

    这个CHM(Compiled Help Manual)文件包含了Java 8版本中的所有核心类库、接口、方法和异常的详细描述,使得开发者能够快速理解和使用Java 8的新特性和已有的API。 首先,我们要关注的是Java 8的重要特性。其中,...

    Google-guava 19.0

    Guava提供了原子类的扩展,如AtomicDoubleArray、AtomicLongMap等,以及Future和ListenableFuture,它们在多线程环境下提供了高效的同步机制。此外,CountDownLatch、CyclicBarrier、Semaphore等并发工具类也使得...

Global site tag (gtag.js) - Google Analytics