Java中的变量分为两类:局部变量和类变量。局部变量是指在方法内定义的变量,如在run方法中定义的变量。对于这些变量来说,并不存在线程之间共享的问题。因此,它们不需要进行数据同步。类变量是在类中定义的变量,作用域是整个类。在执行上面代码的可能结果如下:看到这个结果,可能很多读者会感到奇怪。这个程序明明是启动了100个线程,然后每个线程将静态变量n加1。最后使用join方法使这100个线程都运行完后,再输出这个n值。按正常来讲,结果应该是n = 100。可偏偏结果小于100。大家可以看到在run方法中只有n++一条语句,而在编译后,却有7条中间语言语句。而在007行的iadd也不难猜测是将这个得到的n值加1。其实这里涉及到一个Java内存模型的问题。

java多线程编程之为什么要进行数据同步

java多线程编程之为什么要进行数据同步

java多线程编程之为什么要进行数据同步