java并发多线程如何保证共享变量的线程安全

nickyyu 发布于 2016/10/14 10:22
阅读 706
收藏 0
举个列子:现在应用中有个全局共享变量A,此时有50个并发线程都要使用到A,但是其中一个线程B可能会更改A里的某个属性对象,如何保证B线程修改A之后,不会对其他线程产生影响
加载中
1
红魔小贝
红魔小贝
主要看数据的隔离级别,允不允许出现幻读脏读不可重复读。假设场景是订票,共享数据是票,B线程执行订票未提交时,A线程执行查票。A可能会把已订的票查出来,但是提交订票时就会订不到该票。这种情况虽然查票数据不对,但是也是允许出现的。如果A线程也执行的是订票程序,那就必须进行同步(方法、集合、对象上锁)。线程安全和效率是矛盾的,需要进行折中,一般不建议在方法上同步,太慢了
0
GestureWei
GestureWei
加锁,各种锁,共享锁,互斥锁,等等,或者用synchronized
0
太黑_thj
太黑_thj
换个思路,你的逻辑你肯定知道什么位置会发生对A进行改变的,那就在那个位置在引用A对象之前,先把A拷贝一份出来用,别直接用A对象,然后使用完吧拷贝的对象销毁也就是=null就可以了
0
wangbo888
wangbo888
用jdk的threadlocal,每个线程独立的
0
风中的眼睛
风中的眼睛
可以用Redis来解决
0
老西老西
老西老西

如果单机多线程,可以使用synchronized,若果是多机部署,那么最好使用第三方的锁,例如redis,或者比较笨的办法,使用DB来玩

返回顶部
顶部