关于atomXXX类的测试

今天看了atomXXX类,并做了测试,踩了很多坑,记录一下。

我实现了对数字从1加到10001,使用 AtomicInteger

public class xianCheng {
    AtomicInteger count = new AtomicInteger(1);

     void m(){
//定义方法数字1累加一千次
        for (int i=1;i<=1000;i++){
            //count+1
           count.incrementAndGet();
            每次+1都输出结果并加上时间戳
            System.out.println(count + "aaa"+System.currentTimeMillis());
        }
    }

    public static void main(String[] args) throws InterruptedException {
        xianCheng x = new xianCheng();
        //定义定长的线程池10,每个线程都执行一次m方法
        ExecutorService executor = Executors.newFixedThreadPool(10);
        for (int i=1;i<=10;i++) {
            executor.execute(new Runnable() {
                @Override
                public void run() {
                    x.m();
                }
            });
        };
        executor.shutdown();
        //等待所有的线程都执行结束并输出最后结果,如果一小时内没有结束就强制结束
        executor.awaitTermination(1, TimeUnit.HOURS);
        System.out.println(x.count+"end!!!"+ System.currentTimeMillis()+"..............End!!!");

 因为之前测试最后的system.out总是结果不对,后来知道是线程池没有执行完毕,必须保证所有的线程执行结束然后再进行最后的输出,判断线池程结束的方法还有:

executor.shutdown();
while (true) {
    if (executor.isTerminated()) {
        System.out.println(x.count+"end!!!"+System.currentTimeMillis()+"..............End!!!");
        break;
    }
    Thread.sleep(200);
}

附上学习的链接:https://blog.csdn.net/mediocre117/article/details/72980867

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值