直接上代码:java
一个静态变量B,一个静态方法addB,调用线程池循环增长B,若是不加synchronized关键字给addB方法,则会出现不等于1000的问题:app
即便此时为B添加volatile,仍是不等于正确答案1000.线程
添加synchronized后,才是正确答案1000;code
package org.braven.servlet; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class App { static int B = 0; //static volatile int B = 0; static synchronized void addB() { try { Thread.sleep(1); } catch (Exception e) { // TODO: handle exception } B++; } public static void main(String[] args) throws InterruptedException { /*for (int i = 0; i < 1000; i++) { new Thread(new Runnable() { public void run() { addB(); } }).start(); }*/ ExecutorService pool = Executors.newFixedThreadPool(20); for (int i = 0; i < 1000; i++) { pool.submit(new Runnable() { public void run() { addB(); } }); } Thread.sleep(2000); System.out.println("B最终等于:" + B); App app1 = new App(); App app2 = new App(); System.out.println(app1.B); System.out.println(app2.B); App.addB(); System.out.println(app1.B); System.out.println(app2.B); } }