AtomicBoolean的用法
来源:互联网 发布:淘宝靠谱的男装外贸店 编辑:程序博客网 时间:2024/05/16 17:29
首先先看如下例子
Java代码 收藏代码
private static class BarWorker implements Runnable { private static boolean exists = false; private String name; public BarWorker(String name) { this.name = name; } public void run() { if (!exists) { exists = true; System.out.println(name + " enter"); System.out.println(name + " working"); System.out.println(name + " leave"); exists = false; } else { System.out.println(name + " give up"); } } }
static变量exists用来实现同一时间只有一个worker在工作. 但是假设exists的判断和exists = true;之间有了
其他指令呢
Java代码 收藏代码
private static class BarWorker implements Runnable { private static boolean exists = false; private String name; public BarWorker(String name) { this.name = name; } public void run() { if (!exists) { try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e1) { // do nothing } exists = true; System.out.println(name + " enter"); try { System.out.println(name + " working"); TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) { // do nothing } System.out.println(name + " leave"); exists = false; } else { System.out.println(name + " give up"); } } }
这时输出是
bar2 enter
bar2 working
bar1 enter
bar1 working
bar1 leave
bar2 leave
看到两个线程同时工作了.
这时可以用AtomicBoolean
Java代码 收藏代码
private static class BarWorker implements Runnable { private static AtomicBoolean exists = new AtomicBoolean(false); private String name; public BarWorker(String name) { this.name = name; } public void run() { if (exists.compareAndSet(false, true)) { System.out.println(name + " enter"); try { System.out.println(name + " working"); TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) { // do nothing } System.out.println(name + " leave"); exists.set(false); }else{ System.out.println(name + " give up"); } } }
因为它提供了原子性操作,其中exists.compareAndSet(false, true)这个操作把比较和赋值操作组成了一个原子操作,
中间不会提供可乘之机.输出为
bar1 enter
bar1 working
bar2 give up
1 0
- AtomicBoolean的用法
- AtomicBoolean 类用法
- AtomicBoolean的妙用
- AtomicBoolean多线程的使用
- AtomicBoolean
- AtomicBoolean
- android AtomicBoolean类的使用
- AtomicBoolean 的使用,就是替代if语句
- 基于CAS思想的java并发AtomicBoolean实例详解
- AtomicBoolean运用
- AtomicBoolean使用
- AtomicBoolean使用
- AtomicBoolean介绍
- 理解AtomicBoolean
- 理解AtomicBoolean
- AtomicBoolean使用方法
- JAVA对多线程的两个有用的辅助类(CountDownLatch和AtomicBoolean)
- java用volatile或AtomicBoolean实现高效并发处理 (只初始化一次的功能要求)
- Kmeans算法实现
- poj 3667 Hotel 【线段树区间合并】
- 理解矩阵
- SDCC 2015讲师专访精彩集锦:程序员界“香饽饽”、大神级人物都在!
- 【iOS开发系列】繁简转换
- AtomicBoolean的用法
- jQuery tags input 使用
- SmartSVN安装破解 for mac
- CORS 解决跨域访问问题
- 微信支付-公众号支付-JSAPI调用(Java)
- Android Studio 编码设置,解决Android Studio项目运行时乱码问题
- android开发中碰到的问题总结(保持更新)
- android AsyncTask介绍
- Android手机循环切换图片全屏播放