线程同步,结果总是有点偏差
本来我预期的结果应该是1000,可打印出来的总是990多
这里是源代码
package ex29;import java.util.concurrent.*;public class Ex29_4 { private Integer sum = new Integer(0); public Ex29_4(){ ExecutorService executor = Executors.newFixedThreadPool(1000); for(int i = 0 ; i<1000 ; i++){ executor.execute(new sumTask()); } executor.shutdown(); while(!executor.isTerminated()){ } System.out.println("What is the sum? "+sum.intValue()); } public static void main(String[] args) { // TODO 自动生成方法存根 Ex29_4 ex = new Ex29_4(); } class sumTask implements Runnable{ public synchronized void run(){ int value = sum.intValue()+1; sum = value; } }}public Ex29_4() { ExecutorService executor = Executors.newFixedThreadPool(1000); sumTask task = new sumTask(); for (int i = 0; i < 1000; i++) { executor.execute(task); } executor.shutdown(); while (!executor.isTerminated()) { } System.out.println("What is the sum? " + sum.intValue()); }
[解决办法]