sybn sybn-util 项目说明文档 - 基于java的跨数据库联合查询

sybn counter 计数器

2018-05-17
sybn

简介

sybn counter 是一个多线程计数器, 此接口的两个实现 SybnCounterImpl 和 SybnCounterMapImpl 都是线程安全的. sybn counter 主要有以下功能:

  • 以 Map<String, Long> 的形式维护一组支持inc操作的long型数据
  • 记录任务的开始时间和任务进度,预估任务的剩余时间

用法举例

import cn.sybn.bean.counter.SybnCounter;
import cn.sybn.bean.counter.SybnCounterImpl;

SybnCounter count = new SybnCounterImpl();
count.setCount("aaa", 1);
count.incCount("aaa", 1);
long aaa = count.getCount("aaa"); // 2

count.setTotal(100);
count.incCurrent(10);
String log = count.toCountString(); // {progress:10/100( 10.00%), currentTime:1ms, remainTime:9ms, aaa:2}


  • SybnCounterImpl 和 SybnCounterMapImpl 线程安全 SybnCounterSimpleImpl 线程不安全
      @Test
      public void mainTest() {
          // 测试并发 300 个线程同时写入
          final SybnCounterImpl c = new SybnCounterImpl();
          ExecutorService service = Executors.newFixedThreadPool(300);
          for (int i = 0; i < 1000; i++) {
          service.execute(new SybnCounterUtil.SybnCounterTestThread(c, i));
          }
          service.shutdown();
    
          try {
              service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
              LogUtil.info(c);
          } catch (InterruptedException e) {
              Thread.currentThread().interrupt();
          } catch (Exception e) {
              LogUtil.getLogger().error("", e);
          }
    
          SybnCounterImpl c2 = new SybnCounterImpl(false);
          c2.setCount("a", 1);
          c2.incCount("a", 1);
          c2.clearCount("a");
          c2.incCount("a", 1);
          Assert.assertEquals(1, c2.getCount("a"));
      }
    
  • SybnCounterMapAutoClearImpl 自动淘汰低频数据

Similar Posts

下一篇 excel 工具

Comments

暂不开放评论! 可微信联系