用Java 如何在for循环中创建线程并输出合适结果

staticinti;for(i=0;i<3;i++){newThread(){publicvoidrun(){System.out.println(i);}}.star... static int i;
for(i=0; i<3; i++){
new Thread(){
public void run(){
System.out.println(i);
}
}.start();
}
结果为3 3 3,这是为什么
想得到结果为0 1 2该怎么做
展开
 我来答
發呆碼字員
推荐于2016-08-03 · TA获得超过331个赞
知道小有建树答主
回答量:435
采纳率:0%
帮助的人:265万
展开全部
其实你说的3 3 3 应该都不是正确的!!!
你这个主要是看执行绪的结果,
所以你应该可以试试看跑个几百次应该答案会有更多种,
这个就是执行绪配置问题,
而为何後面要你加上
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO 自动产生的 catch 区块
e.printStackTrace();
}
就是要你等待一下,这样时间配置上才会有可能同部,当然如果你觉得这样的问题还不够完美,
你可以使用 synchronized(test.class) 这个方式来撰写!!!
追问
在这里输出应该是比较单一的,因为只进行了3次循环,如果把循环次数加大会有不同的结果,不过这都不要紧。你能否具体一点地解释一下如何用synchronized(.class)的方式编码呢?
追答
我先和你解释一下synchronized好了,

synchronized 就是资源锁定 就是一次只有一个执行绪可以使用,下一个执行绪需要使用需要等待。
你现在这个问题是,我要列印的时候但是回圈已经做好++的做动了!!!
这个就是一般我们术语说的【竞速】状况,
你现在要解决的就是这个问题,
要让他们会排队,就是排队不要看错喔!!!
执行绪一般是不会去排队的,一般是先抢先赢啦!!!
我简单打一个给你看看好了!!

补充一下:
这里面有两个线程:
for 一个
new 一个
这里需要做的是两个线程需要互相等待对方才能够执行下一步,
以这样个构思应该可以解决这个近乎无解的题目呀= ="
只是我怕解完可能是不知道要打多少程式码= ="
百度网友e152b87
2014-12-10 · 超过15用户采纳过TA的回答
知道答主
回答量:89
采纳率:0%
帮助的人:34.7万
展开全部
添加一个sleep语句,添加位置在start之后
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
在武昌湖记笔记的公孙瓒
2014-12-10 · 超过32用户采纳过TA的回答
知道答主
回答量:132
采纳率:100%
帮助的人:76.7万
展开全部
线程的同步与互斥,百度搜博客,会有大量的介绍,比知道更详细
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
曰希冀
2014-12-10 · TA获得超过254个赞
知道小有建树答主
回答量:181
采纳率:0%
帮助的人:72.6万
展开全部
为什么用static 声明这个i?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式