黑马程序员技术交流社区

标题: 多线程问题 [打印本页]

作者: zl918    时间: 2012-1-8 17:13
标题: 多线程问题
本帖最后由 zl918 于 2012-1-14 10:41 编辑
  1. class MyThread implements Runnable {
  2.         public void run() {
  3.                 for (int i = 0; i < 5; i++) {
  4.                         try {
  5.                                 Thread.sleep(100);
  6.                         } catch (InterruptedException e) {
  7.                         }
  8.                         System.out
  9.                                         .println(Thread.currentThread().getName() + "运行,i = " + i);
  10.                 }
  11.         }
  12. };

  13. public class ThreadSleepDemo {
  14.         public static void main(String args[]) {
  15.                 MyThread mt1 = new MyThread();
  16.                 Thread t1 = new Thread(mt1, "线程");
  17.                 t1.start();
  18.                 System.out.println("ThreadSleepDemo");

  19.         }
  20. }
复制代码
在主方法中System.out.println("ThreadSleepDemo")在启动线程之后,但是运行结果是:
ThreadSleepDemo
线程运行,i = 0
线程运行,i = 1
线程运行,i = 2
线程运行,i = 3
线程运行,i = 4
先运行System后运行start方法。
为什么呢?
是System的优先级高吗?

该贴已经同步到 zl918的微博
作者: 为梦而战    时间: 2012-1-8 17:36
      main也是一个线程,而且是主线程,当你调用 t1.start;启动自己写的线程后,因为你在自己写的线程写了代码:Thread.sleep(100);也就是这个线程启动后就处于睡眠状态,这里,执行权就到了主线程main了,主线程执行System.out.println("ThreadSleepDemo");,然后自己写的线程睡眠时间到,再执行自己的线程体。所以才是你那个结果,你要是在线程体run(){}里,先让它执行点其它的东西,而不是Sleep()或Wait(),再看结果。这个与System的优先级没有关系!
作者: 卢其龙    时间: 2012-1-8 18:25
在我理解中从main启动后所有的线程没有特殊安排默认优先级都为 5.   优先级 1--10

所以System的优先级高吗?  肯定不是

为什么正如楼上所说
作者: chocolate    时间: 2012-1-8 18:43
恩  楼上的  说的 比较能全面点  我也就不多说了  你会看的懂的···! 努力点!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2