这段java代码有什么问题吗?为什么多线程并发执行后结果不是期望的100

publicclassTestMain{publicstaticAtomicIntegerai=newAtomicInteger(0);publicstaticvoidm... public class TestMain {
public static AtomicInteger ai=new AtomicInteger(0);
public static void main(String[] args) {
for(int i=0;i<100;i++)
{
Thread t=new Thread(new Runnable() {
public void run() {
ai.getAndIncrement();
}
}
);
t.start();
}
System.out.println(ai.get());
}
}

//会输出一个随机数
展开
 我来答
kfperfect
2012-07-31 · 超过23用户采纳过TA的回答
知道答主
回答量:70
采纳率:0%
帮助的人:71.4万
展开全部
线程是并发执行的,先后顺序是不能被保证的,也就是i=10的时候启动的线程并不一定比i=11的时候启动的线程先执行到ai.getAndIncrement()这条语句;而且你最后执行输出语句的时候可能有一些线程还没有执行完成。 最重要的原因应该是后者,输出语句之前可以先让main线程sleep 1000ms,然后再看输出结果应该就是100了。
帐号已注销
2012-07-31 · TA获得超过120个赞
知道答主
回答量:166
采纳率:0%
帮助的人:65.1万
展开全部
Thread t=new Thread(new Runnable(),创建对象应该和类的名称一样吧。我也是新手,我觉得是:
TestMain t=new TestMain(new Runnable()。希望能帮到你。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我一点都不man
2012-08-01 · 超过20用户采纳过TA的回答
知道答主
回答量:87
采纳率:0%
帮助的人:41.6万
展开全部
线程并发,100个线程你没指点执行顺序,所以是随机的咯!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式