黑马程序员技术交流社区

标题: 多线程问题?为什么结果是这样的? [打印本页]

作者: 吴琼    时间: 2012-6-27 21:04
标题: 多线程问题?为什么结果是这样的?
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


作者: 贾飞雨    时间: 2012-6-27 21:42
结果必须是这样的!我给你来读一下这个程序是怎么运行的,你就知道为什么是这样的了:首先,主方法执行到  t.run();这里的时候,主线程在这里睡了3000毫秒,醒来后打印这个 System.out.println("MyThread running");然后再回来执行 t.start();执行到这里就开了新的线程,就有了两个线程,然后两个线程同时执行,在这个时候 t.start()运行的时候又睡了3000毫秒,而主线程拿到了执行权,也就是把下面的这句打印了System.out.println("Thread Test");打印完之后t线程睡醒了,把System.out.println("MyThread running");打印了,所以会出现这种你无论执行多少次,都会是这样的结果 !
作者: 李文龙    时间: 2012-6-27 23:56
这个结果的分析二楼已经说的很详细了,在此我就不多做说明了,楼主想问的是多线程的随机性,即多运行几次,结果不同,那么请楼主这样修改一下代码
MyThread t = new MyThread();
  t.run();
  t.start();
  System.out.println("Thread Test");
将红色部分改为
t.start();
t.run();

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




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