多线程操作共享变量问题

public class TestJava {

public static void main(String[] args) {

    A a = new A();
    for (int i = 0; i < 3; i++) {
        new Thread() {
            @Override
            public void run() {
                a.test();
            }
        };
    }

    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    System.out.println(a.getNum());

}

}

class A {

int num = 0;

public void test() {
    for (int i = 0; i < 100000; i++) {
        num++;
    }
}

public int getNum() {
    return num;
}

}

你想表达什么意思?

你这个是线程不安全的,需将num的自增加锁。

  1. 首先你创建的线程都没有调用start()方法启动,根本不会执行线程内方法体;
  2. 其次这个num变量没有用volatile修饰,
  3. 还有你调用方法没有加锁
  4. 最后就算1修复了,2,3两步没做,就算能执行到结果也不正确