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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴琼 中级黑马   /  2012-6-27 21:04  /  1667 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class MyThread extends Thread{
public void run(){
  try {
   Thread.currentThread().sleep(3000);// 返回对当前正在执行的线程对象的引用。
  } catch (InterruptedException e) {
  }
  System.out.println("MyThread running");
}
}
public class ThreadTest{
public static void main(String argv[]) {
  MyThread t = new MyThread();
  t.run();
  t.start();
  System.out.println("Thread Test");
   }
}
运行了还几次.为什么答案都是是这个呢?多线程的话答案不是随机性的么?
MyThread running
Thread Test
MyThread running

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1 下楼学习

查看全部评分

2 个回复

正序浏览
这个结果的分析二楼已经说的很详细了,在此我就不多做说明了,楼主想问的是多线程的随机性,即多运行几次,结果不同,那么请楼主这样修改一下代码
MyThread t = new MyThread();
  t.run();
  t.start();
  System.out.println("Thread Test");
将红色部分改为
t.start();
t.run();

那么,就能达到楼主所说的多线程答案随机性了。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
结果必须是这样的!我给你来读一下这个程序是怎么运行的,你就知道为什么是这样的了:首先,主方法执行到  t.run();这里的时候,主线程在这里睡了3000毫秒,醒来后打印这个 System.out.println("MyThread running");然后再回来执行 t.start();执行到这里就开了新的线程,就有了两个线程,然后两个线程同时执行,在这个时候 t.start()运行的时候又睡了3000毫秒,而主线程拿到了执行权,也就是把下面的这句打印了System.out.println("Thread Test");打印完之后t线程睡醒了,把System.out.println("MyThread running");打印了,所以会出现这种你无论执行多少次,都会是这样的结果 !

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马