background image

 
}
  }

  这个类子类化 Thread 并且提供它自己的 run()方法。上面代码中的函数运行一个循
环来打印传送过来的字符串到屏幕上,然后等待一个随机的时间数目。在循环十次后,该
函数打印"DONE!",然后退出-并由它杀死这个线程。下面是创建线程的主函数:
  public class TwoThreadsDemo {
  public static void main (String[] args) {
  new SimpleThread("Do it!").start();
  new SimpleThread("Definitely not!").start();
  }
  }

  注意该代码极为简单:函数开始,给定一个名字(它是该线程将要打印输出的字符
串)并且调用 start()。然后,start()将调用 run()方法。程序的结果如下所示:
  0 Do it!
  0 Definitely not!
  1 Definitely not!
  2 Definitely not!
  1 Do it!
  2 Do it!
  3 Do it!
  3 Definitely not!
  4 Do it!
  4 Definitely not!
  5 Do it!
  5 Definitely not!
  6 Do it!
  7 Do it!
  6 Definitely not!
  8 Do it!
  7 Definitely not!
  8 Definitely not!
  9 Do it!
  DONE! Do it!
  9 Definitely not!
  DONE! Definitely not!
  正如你所看到的,这两个线程的输出结果纠合到一起。在一个单线程程序中,所有
的"Do it!"命令将一起打印,后面跟着输出"Definitely not!"。
  这个程序的不同运行将产生不同的结果。这种不确定性来源于两个方面:在循环中有
一个随机的暂停;更为重要的是,因为线程执行时间没法保证。这是一个关键的原则。JVM
将根据它自己的时间表运行这些进程(虚拟机一般支持尽可能快地运行这些线程,但是没