目的:简述java多线程的共享变量

 

共享变量:多个线程都会使用到的同一变量。

 

Q : 为什么共享变量会造成数据的错误呢???

 

    A : 多个线程在操作共享变量的时候,不是直接在主内存中去操作的。而是都取一个共享变量的副本在工作内存去进行相关作。

 

下面举例说明:有两个线程同时操作一个共享变量(默认值是0),线程一,让共享变量加2,线程二,让共享变量减3。那么结果应该是-1.

 

但实际可能是:线程一,拿到了主内存的数据(0),加2,还没有同步到主内存中去,线程二已经取出了主内存的数据(0),减3,这时候线程一,同步到主内存中去。数据变成2,然后线程二开始同步数据,数据变成-3。

 

 

解决办法:volatile 和 synchronized 关键字。