java多线程之共享变量

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Tomwildboar/article/details/85248624

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

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

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/Tomwildboar/article/details/85248624