博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
原子操作类AtomicInteger
阅读量:4182 次
发布时间:2019-05-26

本文共 2733 字,大约阅读时间需要 9 分钟。

一、普通的int型自增长测试

package AtomicInteger;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * @author xiaobu * @version JDK1.8.0_171 * @date on  2018/8/7 16:15 */public class IntValueIncrementTest {    public static void main(String[] args) throws InterruptedException {        intValueIncrement();        Thread.sleep(5000);        //39991 <40000        System.out.println("最终的结果:"+value);    }    private static int value=0;    public static  synchronized void intValueIncrement(){        ExecutorService service = Executors.newFixedThreadPool(10000);        for(int i=0;i<10000;i++){         service.execute(()->{             for(int j=0;j<4;j++){                 System.out.println(value++);             }         });        }    }}

二、用volatile修饰的int自增长类型。

package AtomicInteger;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * @author xiaobu * @version JDK1.8.0_171 * @date on  2018/8/7 16:15 */public class IntVolatileValueIncrementTest {    public static void main(String[] args) throws InterruptedException {        intValueIncrement();        Thread.sleep(5000);        // 39993 <4000        System.out.println("最终的结果:" + value);    }    private static volatile int value = 0;    public static synchronized void intValueIncrement() {        ExecutorService service = Executors.newFixedThreadPool(10000);        for (int i = 0; i < 10000; i++) {            service.execute(() -> {                for (int j = 0; j < 4; j++) {                    System.out.println(value++);                }            });        }    }}

三、AtomicInteger原子操作类类型

package AtomicInteger;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.atomic.AtomicInteger;/** * @author xiaobu * @version JDK1.8.0_171 * @date on  2018/8/7 16:08 */public class AtomicIntegerTest {    public static final AtomicInteger atomicInteger = new AtomicInteger(0);    public static void main(String[] args) throws InterruptedException {        atomicIntegerTest();        Thread.sleep(3000);        //40000        System.out.println("最终结果是" + atomicInteger.get());    }    private  static void atomicIntegerTest() {        ExecutorService executorService = Executors.newFixedThreadPool(10000);        for (int i = 0; i < 10000; i++) {            executorService.execute(() -> {                for (int j = 0; j < 4; j++) {                    System.out.println(atomicInteger.getAndIncrement());                }            });        }        executorService.shutdown();    }}

volatile的作用:

1.保证此变量对所有的线程的可见性

2.禁止指令重排序优化。
 

结果表明还是会存在并发的问题。因为java的运算(自增)不是原子性的。

 

 CAS(Compare And Swap  比较并交换 ) 的并发算法称为 无锁定算法所以不阻塞。

可以避免多线程的优先级倒置和死锁情况的发生,提升在高并发处理下的性能。   

转载地址:http://yfgai.baihongyu.com/

你可能感兴趣的文章
SCI审稿人亲授:机器学习在智能化时代下的应用
查看>>
安卓微信 8.0 内测版来啦!
查看>>
我劝你不要再留QQ邮箱了
查看>>
真香!用 4K 高清显示器写代码!(包邮送一台)
查看>>
神器!各行业必备!低调使用
查看>>
B 站,牛逼!
查看>>
微信状态视频、图片素材来啦!
查看>>
再见了!锤子!!!
查看>>
LeetCode 全站第一,牛逼!
查看>>
为什么全网都在劝你学Java、Python,而不是C++?
查看>>
卧槽!阿里巴巴《算法笔记》开源了,完整版PDF开放下载!
查看>>
百度的骚操作。。。
查看>>
蔚来,牛X!
查看>>
微信悄悄新出了个野心很大的App
查看>>
微信红包封面制作小程序开放,人人都可免费制作了!!!
查看>>
13000亿!目瞪口呆!
查看>>
腾讯,搞了一个大事!
查看>>
入职腾讯第九年,我辞职了
查看>>
17 张程序员壁纸(使用频率很高)
查看>>
送一台全新手机,手慢无~
查看>>