AtomicBoolean 介绍和使用

本文探讨了AtomicBoolean在多线程环境中的应用,并通过对比普通布尔变量的方式,阐述了其如何确保原子操作,避免多线程并发问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍:

       第一次看到atomicBoolean 以为是boolean 的一个子类,后来经过调查才发现,这个是一个工具类,不太常用,但是可以起到和 boolean 一样的效果

      它主要运用到多线程中。

      假如有Program A && Program B ,他们共同使用一个static boolean flag; 作为标准来控制各自的代码如下:

      

 public class ProgA implements Runnable {

		@Override
		public void run() {
			// TODO Auto-generated method stub
			if(flag == true) {   //step1
				flag = false; //step2
				//do something which cause a long time
				
			}
			//return the flag to true for other user
			flag = true;
		}
    }
    
    public class ProgB implements Runnable {

		@Override
		public void run() {
			if(flag == true) {
				flag = false;
				//do something which cause a long time
				
			}
			//return the flag to true for other user
			flag = true;
		    	
		}
    	
    }

code 希望通过flag 来保证多线程中只有一个相同的work 可以做,然后,在 step1 和 step2 之间,多线程中是无法保证step1 和 step2 是原子操作的,所以

once 的问题就容易出现了,这个时候,private static AtomicBoolean flag2; 来了

AtomicBoolean 能够保证原子操作

private static AtomicBoolean flag2; 
if(flag2.compareAndSet(false, true))

这个if语句完成了两件工作,先判断 flag2 是不是等于 false,然后,再将flag2 设置成为true,这样我们的判断就用担心多线程的困扰了,在执行 compareAndSet 语句时,其他

任何程序都会block,只有这个操作完成后,其他程序才会进行.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值