java多线程,每个线程中new同一个类,生成的对象相同,这是为何,这会造成共享变量的问题吧 20

 我来答
07155204
2015-12-28
知道答主
回答量:27
采纳率:0%
帮助的人:12.2万
展开全部
因为你的Obj没有实现equals和hashcode方法,然后当创建对象的时候,java底层给的是一套固定的顺序的hashcode,当你是多个线程创建的时候,所以会有相同的出现。当你的线程池是1的时候,就不会出现重复这个现象,同样你可以观察,你每次运行程序的时候,几乎都是那几个hash值出现。
更多追问追答
追问
相同的出现了就是说产生了相同的对象咯?那是不是多个线程之间就共享了这个对象
相同的出现了就是说产生了相同的对象咯?那是不是多个线程之间就共享了这个对象
我是worden
2021-11-04 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:281
采纳率:40%
帮助的人:24.1万
展开全部

是软件的问题么,为什么我写了跟你一样的代码,我的就不会出现这种问题


package test2;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class test2_test5 {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(5);
for (int i = 0;i < 5;i++) {
executorService.execute(
new Runnable() {
@Override
public void run() {
Object o = new Object();
System.out.println(o);
}
}
);
}
executorService.shutdown();
}
}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳光的雷咩咩
2021-11-03 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7848万
展开全部
我认为不是生成了相同对象,而是多个线程同时打印的话,s变量的值有可能还没来得及更新,打印的是更新前的值。
为了证明确实是产生了不同变量,你可以把每个s.toString()的字符串保存进一个列表,最后看列表的个数是不是5。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我是杨威利
2021-11-04 · 超过15用户采纳过TA的回答
知道答主
回答量:48
采纳率:50%
帮助的人:11.1万
展开全部
不应该啊。我用你的代码,设置线程池20个。运行了很多次,obj也没有重复啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
alant_juhox6c6
2021-11-10
知道答主
回答量:11
采纳率:0%
帮助的人:5757
展开全部
理论上不会的,如果遇到特定情况,系统判定你这个对象没人使用的情况下,可能会指向给下一个new! 这是个内部机制问题!得去翻源代码 累死!
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式