在java中多线程访问同一数据时,会出现数据不一致的问题。java中的自增操作需要多步完成,而且不是原子性操作控制。下面的代码说明了问题,源自java编程思想
</pre><pre code_snippet_id="1623662" snippet_file_name="blog_20160325_2_1202041" name="code" class="java">package synchonize;
public class EvenGenerator extends IntGenerator {
private int currentEvenValue = 0;
public int next(){
++currentEvenValue;
Thread.yield();
++currentEvenValue;
return currentEvenValue;
}
public static void main(String []args){
EvenChecker.test(new EvenGenerator());
}
}
package synchonize;
public abstract class IntGenerator {
private volatile boolean canceled = false;
public abstract int next();
public void cancel(){
canceled = true;
}
public boolean isCanceled(){
return canceled;
}
}