AtomicBoolean 介绍和使用

介绍:

       第一次看到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,只有这个操作完成后,其他程序才会进行.

你可能感兴趣的:(java,atomicboolean)