当前位置: 代码迷 >> Java相关 >> 线程问题
  详细解决方案

线程问题

热度:275   发布时间:2006-10-21 01:17:27.0
线程问题

  class SimpleThread extends Thread {
  public SimpleThread(String str) {
   super(str); //调用其父类的构造方法
  }
  public void run() { //重写run方法
   for (int i = 0; i < 10; i++) {
    System.out.println(i + " " + getName());
             //打印次数和线程的名字
    try {
      sleep((int)(Math.random() * 1000));
             //线程睡眠,把控制权交出去
    } catch (InterruptedException e) {}
  }

     System.out.println("DONE! " + getName());
             //线程执行结束
    }
  }
  public class TwoThreadsTest {
   public static void main (String args[]) {
    new SimpleThread("First").start();
             //第一个线程的名字为First
    new SimpleThread("Second").start();
             //第二个线程的名字为Second
}
}

   运行结果:
    0 First
    0 Second
    1 Second
    1 First
    2 First
    2 Second
    3 Second
    3 First
    4 First
    4 Second
    5 First
    5 Second
    6 Second
    6 First
    7 First
    7 Second
    8 Second
    9 Second
    8 First
    DONE! Second
    9 First
    DONE! First
----------------------------------------------------

既然是sleep((int)(Math.random() * 1000));随机产生睡眠时间,那么为什么线程1和2会以固定顺序输出呢?????

搜索更多相关的解决方案: 线程  str  int  public  run  

----------------解决方案--------------------------------------------------------
因为你是顺序执行的,而你产生的随机时间,不过是两个顺序执行的命令之间的睡眠时间罢了
----------------解决方案--------------------------------------------------------
能说清楚点吗,多线程不是同时进行吗,当first和Second执行完后,first随即获取的数如果是0 而second获取的是1的话
不就应该是first在前 second在后吗
----------------解决方案--------------------------------------------------------
还是说这里不是线程而是两个进程?
----------------解决方案--------------------------------------------------------
不好意思,我没有好好看你的程序,你的程序应该没有问题,我把你的程序看成了一个线程的两次运行不过你的程序汉字的空格实在是太多了,导致了我100个错误.
这是我两次运行的结果:
0 First
0 Second
1 Second
1 First
2 Second
2 First
3 First
4 First
5 First
3 Second
6 First
4 Second
7 First
5 Second
6 Second
8 First
7 Second
9 First
8 Second
9 Second
DONE! First
DONE! Second
Press any key to continue...

0 First
0 Second
1 First
2 First
3 First
1 Second
4 First
5 First
2 Second
6 First
3 Second
7 First
4 Second
5 Second
8 First
9 First
6 Second
DONE! First
7 Second
8 Second
9 Second
DONE! Second
Press any key to continue...

----------------解决方案--------------------------------------------------------

谢谢了哈 我是因为在网吧不能运行java程序
这段代码是 这网站上首业的程序,因为我观点不同,而又不敢轻易怀疑程序的正确性,所以就发问了
看来是网站上写错了


----------------解决方案--------------------------------------------------------
  相关解决方案