今天看了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