多线程中,static函数与非static函数的区别?

最近在学习多线程,刚入门,好多东西不懂,下面这段代码今天想了半天也没明白,希望看到的兄弟姐妹能解释下。

public class NotThreadSafeCounter extends Thread {

    private static int counter = 0;

    public void run() {
System.out.println("counter:" + getCount());
}
public static int getCount() { try {
Thread.sleep(1500);
} catch (Exception e) {
e.printStackTrace();
}
return counter++; } public static void main(String[] args) { for (int i = 0; i < 5; i++) {
new NotThreadSafeCounter().start();
}
} }

下面是输出结果(当然了,输出结果不确定)

counter:1
counter:0
counter:2
counter:3
counter:4

不明白的地方是为什么0至4全部输出,这种情况下有没有可能五个thread中的某几个读到了相同的值。如果去掉static,就会出现0-4不全输出的结果,希望帮忙解释下。

上一篇:git - 必备指令


下一篇:linux编程查看某个系统调用、库函数所属的头文件