JAVA提供了AtomicInteger,AtomicLong,AtomicReference等原子类,这些原子类有一些方法是原子方法,实例如下:
public class AtomicIntegerTest implements Runnable{
private AtomicInteger i=new AtomicInteger(0);
public int getValue()
{
return i.get();//这是原子方法
}
public void evenIncrement()
{
i.addAndGet(2);//这是原子方法
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true)
{
evenIncrement();
}
}
public static void main(String[] args)
{
new Timer().schedule(new TimerTask(){
@Override
public void run() {
// TODO Auto-generated method stub
System.err.println("Aborting...");
System.exit(0);
}
}, 5000);
ExecutorService exec=Executors.newCachedThreadPool();
AtomicIntegerTest ait=new AtomicIntegerTest();
exec.execute(ait);
while(true)
{
int val=ait.getValue();
if(val%2!=0) //运行可知道,这个地方永远不会执行
{
System.out.println(""+val);
System.exit(0);
}
}
}
}