对于一个原子操作来说,是线程安全的,如果在java中存在这样的原子操作,那么到底又哪些?其实JDK里面就自带了原子操作的工具给我们使用了。
有时候原子操作是必须的,在多线程中对一个变量的操作采取原子操作的话,就像数据库中增加一个用户定义的自增的序列号(当然也可以是其它)一样,在同时对一个表执行插入语句很多的时候,它们一样正常的工作,按事先规定的运行。
关于原子操作文档请参考其他知识文档,这里不过多描述。给出一个实用代码作为借鉴:
import java.util.concurrent.atomic.AtomicLong;
public class NonblockingLongCounter{
private AtomicLong counter = new AtomicLong();
public NonblockingLongCounter(){
reset();
}
public void reset(){
counter.set(0);
}
public long getValue(){
return counter.get();
}
public long increment(){
return counter.incrementAndGet();
}
public long increment(long value){
long v;
do{
v = counter.get();
}
while (!counter.compareAndSet(v, v + value));
return v + value;
}
public long decrement(){
return counter.decrementAndGet();
}
}