zoukankan      html  css  js  c++  java
  • 多线程并发安全计数器实现限流(三) 加锁实现计数器

    一、加锁实现计数器

    public class CounterSync implements Counter {
    
        volatile int i = 0; // 本质是修改内存中某一个变量的值
    
        public synchronized int incr() {
            return i++;
        }
    
        public int decr() {
            return i--;
        }
    
        @Override
        public int get() {
            return i;
        }
    }
    

      

    二、测试

    public static void main(String[] args) throws InterruptedException {
            final Counter ct = new CounterSync();
    
            //模拟多线程场景
            CountDownLatch countDownLatch = new CountDownLatch(2);
    
            for (int i = 0; i < 2; i++) {
                new Thread(() -> {
                    long begin = System.nanoTime();
                    for (int j = 0; j < 10000; j++) {
                        ct.incr();
                    }
                    System.out.println("done...运算时间: " + (System.nanoTime() - begin));
                    countDownLatch.countDown();
                }).start();
            }
    
            countDownLatch.await();
            System.out.println("计数器最终结果: " + ct.get());
            // 预期结果应该 --- 20000
        }
    

      

    三、打印结果

    done...运算时间: 1173900
    done...运算时间: 803900
    计数器最终结果: 20000
  • 相关阅读:
    Struts2项目问题及解决方式
    CSS样式编写案例
    第二个项目总结
    CSS布局中的问题解决方式
    CSS3中的Flexbox弹性布局(二)
    CSS3中的Flexbox弹性布局(一)
    python----递归函数
    python----函数进阶
    python----函数
    python----装饰器
  • 原文地址:https://www.cnblogs.com/Jomini/p/13621964.html
Copyright © 2011-2022 走看看