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(); } }
相关推荐
- **计数器**:AtomicLongMap 和 Counter 类提供了一种线程安全的方式来统计和操作数据。 5. **其他实用工具** - **事件监听**:Guava 提供了 EventBus,一个简单的发布/订阅事件总线,方便组件间的通信。 - **...
例如,可以创建一个全局的距离数组,每个线程在更新完其负责的顶点后,使用`AtomicIntegerArray`或`AtomicLongMap`(如`com.google.common.collect.MapMaker`库提供的)进行原子操作,确保更新的正确性,避免数据...
6. **并发工具增强**:加入了`java.util.concurrent.atomic`包中的新原子类,如`AtomicIntegerArray`和`AtomicLongMap`,以及`Phaser`,一个用于协调多个任务执行的同步工具。 7. **字符串操作优化**:增加了`...
这个CHM(Compiled Help Manual)文件包含了Java 8版本中的所有核心类库、接口、方法和异常的详细描述,使得开发者能够快速理解和使用Java 8的新特性和已有的API。 首先,我们要关注的是Java 8的重要特性。其中,...
Guava提供了原子类的扩展,如AtomicDoubleArray、AtomicLongMap等,以及Future和ListenableFuture,它们在多线程环境下提供了高效的同步机制。此外,CountDownLatch、CyclicBarrier、Semaphore等并发工具类也使得...