A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zl918 黑马帝   /  2012-1-8 17:13  /  2081 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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的微博

3 个回复

倒序浏览
      main也是一个线程,而且是主线程,当你调用 t1.start;启动自己写的线程后,因为你在自己写的线程写了代码:Thread.sleep(100);也就是这个线程启动后就处于睡眠状态,这里,执行权就到了主线程main了,主线程执行System.out.println("ThreadSleepDemo");,然后自己写的线程睡眠时间到,再执行自己的线程体。所以才是你那个结果,你要是在线程体run(){}里,先让它执行点其它的东西,而不是Sleep()或Wait(),再看结果。这个与System的优先级没有关系!

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
在我理解中从main启动后所有的线程没有特殊安排默认优先级都为 5.   优先级 1--10

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

为什么正如楼上所说
回复 使用道具 举报
恩  楼上的  说的 比较能全面点  我也就不多说了  你会看的懂的···! 努力点!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马