2 jujiawu1024 jujiawu1024 于 2016.04.11 18:00 提问

多线程计算相同的数据,结果为什么不稳定

多线程计算相同的数据,结果为什么不稳定。已经测试过了,如果是单线程的,结果就是稳定的,请问怎么回事?

4个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.04.11 18:55
已采纳

多线程之间如果访问了相同数据的话,那么就需要做线程同步访问控制才能保证数据的一致性。
例如:i++操作,本质是三个操作读取i,i加1,然后将i的值写入内存中,中三个操作如果有两个操作跨线程了,那么就导致其他线程可能得到错误的结果。
所以多线程访问共享变量需要做同步处理。

qq_26544491
qq_26544491   2016.04.11 18:17

脏数据,线程之间相互通信出问题了呗

qinjisheng_11
qinjisheng_11   2016.04.11 23:31

多线程的时候,每个线程的执行顺序不一定,造成结果不一定,可以考虑加锁!

xiaoyao880609
xiaoyao880609   2016.04.12 17:13

应该是线程之间变量冲突导致的,可以使用ThreadLocal封装变量,这样就可以实现线程间变量冲突。
下面是我整理的博客,里面有讲解ThreadLocal,希望对你有帮助~
http://blog.csdn.net/xiaoyao880609/article/details/51002928

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
多线程并发中计算结果重复的原因
线程延时问题 多线程在多循环语句中,一条线程运行结束并改变判断的值, 但是在运行时还未更改判断的值前,又运行一条线程,两条线程同时运行线程语句,那么上一个线程未更改的值会和下一条线程相同 原因: 设每次运行两条线程,那么 线程1、线程2 -> 先后判断条件 -> 满足条件同时运行语句 -> 线程1输出语句 -> 线程2输出语句 ->线程1更改判断值 ->其他线程不通过。两个线程计算“
solr入门之多线程默认查询solr库的返回结果不一致问题
今天遇到了个问题 项目中的solr的索引建立需要去查询另外一个solr的库来得到数据源 我是使用多线程默认的score排序来做的 期间多次发现查询的结果顺序不一致 刚刚开始以为是多线程操作变量导致 后来加入线程锁,现象已经存在 然后使用debug来调试,最后锁定查询solr库这个地方 发现根本就是查询的结果就是这个样子. 这里就不能使用默认的score来进行排序了. 选取一个能够
多线程计算数据,然后合并数据
多线程计算数据,然后合并数据
关于多线程导致数据不一致的情况的思考
这里我要引入一个比较不是很常见的Java 内存模型(JMM java Memory Model),线程基础数据会存放在一个自身对应的线程栈中,如果两个线程需要交互必须要通过共享内存中的变量进行。才能够达到线程间通信的效果。但是由于JVM可以对他们进行任意排序以提高程序的性能。同时处理器也会对指令进行优化。这些操作会导致在多线程环境下数据变得不可靠。因为指令的顺序因为处理器的优化导致了一些不稳定的因
怎么得到多线程的运算结果并处理
        最近参加了一个学校的程序设计比赛,为了解决运算速度使用了多线程,但是一个问题难倒我了,那就是怎么获取多线程的运算结果并作处理呢?查看的很多博客也没有得到满意的答案。目的:将多线程的运算结果存入线程安全的集合中一下几种方案我都没有成功,可能是我的使用有问题,如果有人看到感谢你们指出1.使用带有返回值的Callable和接收返回值的Future    但是使用多个线程同时持有一个Fut...
java多线程分发问题——多线程求和
最近读了的分发部分,又碰到一个网友想利用多线程求和并且汇总求最后结果,具体要求是这样的“写十个线程,第一个线程求1到10的和,第二个11到20的和,第三个求21到30的和...第10个求91到100的和,求十个线程的和”。可以利用CyclicBarrier将分发后的任务汇总,将所有的线程去执行,执行结果后调用显示最后的结果线程。下面写了一段代码可以参考一下。 import java.util.c
分布式搜索elasticsearch 搜索结果排序不一致性问题
想象这一种情况,如果搜索结果中得分出现相同的情况下:由于搜索会在分片的副本之间均衡的轮询请求,可能会出现请求在不同的副本之间返回的循序不同,从而影响排序结果的稳定性。 搜索接口有提供preference参数:curl localhost:9200/_search?preference=xyzabc123。 可以使用的参数: _primary,_primary_first,_local,_onl
js的不稳定?
今天写的东西,同一个东西不做任何修改,重复执行的时候时而可以,时而不行,不知道什么原因导致,是js的不稳定导致的?js真的有不稳定这回事?自己记下来,看看以后会不会有解决方案。
多核并行计算——并发与并行编程问题
并行程序设计 目前并行程序设计的状况是:①并行软件的发展落后于并行硬件;②和串行系统的应用软件相比,现今的并行系统应用软件甚少且不成熟;③并行软件的缺乏是发展并行计算的主要障碍;④而且这种状态仍在继续. 其原因是:①并行程序设计不但包含了串行程序设计,而且还包含了更多的富有挑战性的问题;②串行程序设计仅有一个普遍被接受的冯*诺依曼模型,而并行计算模型虽有好多,但没有一个被共同认可;
多线程分页获取查询结果,所有线程执行完毕,按顺序合并查询结果
int nums = 5000; int count = pubBookService.getBookExportCount(params); int thrednum = (count % nums == 0) ? (count / nums) : (count / nums + 1); List> data = new ArrayList>(); ExecutorServic