多线程并发安全计数器实现限流(三) 加锁实现计数器
一、加锁实现计数器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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; } } |
二、测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步