黑马程序员技术交流社区
标题: 多线程打印同一组数据重复 [打印本页]
作者: 洋葱骑士 时间: 2014-3-2 11:52
标题: 多线程打印同一组数据重复
本帖最后由 洋葱骑士 于 2014-3-2 12:31 编辑
public class Hello {
public static void main(String[] args) throws ClassNotFoundException
{
D d = new D(0);
Thread t1 = new Thread(d);
Thread t2 = new Thread(d);
t1.start();
t2.start();
}
}
class D implements Runnable{
private static int num;
D(int n){
num= n;
}
public void run(){
for(;num<20;++num)
System.out.println(num + " " +Thread.currentThread().getName());
}
}
请教一下啊
以上的代码打印了两遍 0,问题出在哪里啊?
怎么才能就打印一遍呢。
作者: yunzhongzhuhuo 时间: 2014-3-2 12:16
我运行过你的代码,没有出现两次0的情况,而且,由于你的for循环次数太少,基本上一个线程就给打印完了,第二个线程可能只用不上,我就给你改了一下,你看看
- public class Hello {
- public static void main(String[] args) throws ClassNotFoundException
- {
- D d = new D(0);
- Thread t1 = new Thread(d);
- t1.setName("d1");
- Thread t2 = new Thread(d);
- t2.setName("d2");
- t1.start();
- t2.start();
- }
- }
- class D implements Runnable{
- private static int num;
- D(int n){
- num= n;
- }
- public void run(){
- for(;num<20;num++)
- {
- try {
- Thread.sleep(500);
- System.out.println(num + "..." +Thread.currentThread().getName());
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- }
- }
- }
复制代码
作者: 洋葱骑士 时间: 2014-3-2 12:24
本帖最后由 洋葱骑士 于 2014-3-2 12:28 编辑
刚刚用你的程序,结果还是不对。然后还是谢谢回答
0...d1
0...d2
2...d1
3...d2
4...d1
4...d2
6...d2
6...d1
8...d1
8...d2
10...d1
10...d2
12...d1
12...d2
14...d1
14...d2
16...d1
17...d2
18...d1
19...d2
20...d1然后问题找到了:
改为如下语句后就正常了
for(;num<20;)
System.out.println(num+++ " " +Thread.currentThread().getName());
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |