Boolean值的变化的时候不允许在之间插入,保持操作的原子性

它提供了原子性操作,其中exists.compareAndSet(false, true)这个操作把比较和赋值操作组成了一个原子操作,
中间不会提供可乘之机.输出为

AtomicBoolean 高效并发处理 “只初始化一次”

可以让一个线程等待另一个线程完成任务后再执行:

    public static void main(String[] args) {
Thread t2 = new Thread(new BarWorker("bb"));
Thread t1 = new Thread(new BarWorker("aa"));
t2.run();
t1.run();
} 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)) {
// 当第一个线程设置为true后,另外的线程是进不来的
System.out.println(name + " enter" + "currentvalue=" + exists.get());
try {
System.out.println(name + " working");
Thread.sleep(2000);
} catch (InterruptedException e) {
// do nothing
}
System.out.println(name + " leave");
exists.set(false);
} else {
System.out.println(name + " give up");
}
}
}

thread_AtomicBoolean的更多相关文章

随机推荐

  1. Linux内核同步方法

    1.原子操作,是其它同步方法的基础. 2.自旋锁,线程试图获取一个已经被别人持有的自旋锁,当前线程处于忙等待,占用cpu资源. 3.读写自旋锁,根据通用性和针对性的特点,普通自旋锁在特定场景下的表现会 ...

  2. Visual Studio 2008 使用 WinCE 5.0 Emulator

    1. 簡介 由於 Visua Studio 2008 與 WinCE 5.0 Emulator 並沒有完全整合,因此想要測試我們所開發的 Windows CE 程式,需透過設定,將我們所開發的程式丟到 ...

  3. 准备开源一套异形UI控件

    今天整理磁盘,发现在一个以前加密过的一个磁盘文件中发现了一些以前做的UI代码.平时都没怎么去用,放着放着只会慢慢的去遗忘,所以打算慢慢的将一些UI代码整理整理,然后开源出来,集合广大Delphier的 ...

  4. js数据类型判断和数组判断

    这么基础的东西实在不应该再记录了,不过嘛,温故知新~就先从数据类型开始吧 js六大数据类型:number.string.object.Boolean.null.undefined string: 由单 ...

  5. No module named flask.ext.sqlalchemy.SQLALchemy

    在学习<OReilly.Flask.Web.Development>的时候,按照书的例子到了数据库那一章,在运行python hello.py shell的时候出现了“ImportErro ...

  6. 英語版Windows Server 2012 R2を日本語化する手順

    [スタート]ボタンを押し.[Control Panel]を起動 [Clock, Language and Region]の下の[Add a Language]をクリック [Add a Language ...

  7. dwz_bootstrap + thinkphp

    http://www.thinkphp.cn/code/936.html  回去继续学习 SuperWebSocket

  8. WCF客户端承载

    http://www.cnblogs.com/wengyuli/archive/2010/12/27/1918109.html参考 Hi victory,   你提出的问题很好,这个问题,相信很多人学 ...

  9. 物料分类账 [COML] PART 1 - 概览

    物料分类账 [COML] PART 1 - 概览 一).原理 1). •实际成本/物料分类帐是产品成本控制模块的一个子模块,产品成本控制包括三个子模块,产品成本计划,成本对象控制,实际成本/物料分类帐 ...

  10. python 字符串截取

    我们可以通过索引来提取想要获取的字符,可以把python的字符串也做为字符串的列表就更好理解 python的字串列表有2种取值顺序1是从左到右索引默认0开始的,最大范围是字符串长度少1s = 'ilo ...