AtomicFloat

实现JDK没有提供的AtomicFloat

喜夏-厌秋 提交于 2019-12-02 21:26:41
Java8内置了强大的多核支持,我们在处理数据的时候,如果不充分利用多核,都好不意思跟老板打招呼。 我们经常会使用AtomicInteger来做计数器,如下所示: List<String> words = Files.readAllLines(Paths.get("src/main/resources/dic.txt")); AtomicInteger i = new AtomicInteger(); words.parallelStream().forEach(word -> { //获取word的同义词、反义词以及相关词 //...... LOGGER.info("进度:" + total + "/" + i.incrementAndGet() + " 来自线程:" + Thread.currentThread()); }); 在这段代码中,我们需要注意两点,一是parallelStream,二是变量i。 parallelStream的使用表示forEach中的代码段有可能会在不同线程中并发执行,因此变量i的incrementAndGet方法要保证是原子操作,否则计数器的数据就可能会出错。 没啥问题,一切都还很美好,so far so nice。 有一天,我们的需求复杂了,我们需要的计数器不仅仅 只是 +1,而是要支持小数,如2.5,3.1等等,这有什么大不了的,我们把