黑马程序员技术交流社区

标题: 这个运行的结果为什么跟书上不一样? [打印本页]

作者: 菠菜树    时间: 2015-2-23 21:54
标题: 这个运行的结果为什么跟书上不一样?
  1. public class Test_7 implements Runnable{

  2.         public static void main(String[] args) {
  3.                 Test_7 t7=new Test_7();
  4.                 Thread t7t=new Thread(t7);
  5.                 t7t.start();
  6.                 try{
  7.                         Thread.sleep(2000);
  8.                 }
  9.                 catch(InterruptedException e){}
  10.                 System.out.println("In the main(),interrupt the other thread !");
  11.                 t7t.interrupt();
  12.                 System.out.println("In the main(),quit !");
  13.         }
  14.         public void run(){
  15.                 try{
  16.                         System.out.println("In the run(),this thread sleep 20S !");
  17.                         Thread.sleep(20000);
  18.                         System.out.println("In the run(),this thread is go on !");
  19.                 }
  20.                 catch(InterruptedException e){
  21.                         System.out.println("In the run(),this thread is interrupted !");
  22.                         return;
  23.                 }
  24.                 System.out.println("In the run(),this thread is go to finish !");
  25.                 System.out.println("In the run(),this thread quit in normal !");
  26.         }
  27. }
复制代码

书上的结果是:
In the run(),this thread sleep 20S !
In the main(),interrupt the other thread !
In the run(),this thread is interrupted !
In the main(),quit !

我的结果是:
In the run(),this thread sleep 20S !
In the main(),interrupt the other thread !
In the main(),quit !
In the run(),this thread is interrupted !
作者: linuxpara910829    时间: 2015-2-24 01:43
这个跟你程序没关系 ,   跟你的cpu有关系,你开启了两个线程,先执行那个线程后执行那个线程cpu说了算。
书上的是Thread-0线程先睡了,也就先醒,
你的是主线程先睡了,主线程现醒。
你的主线程瞬间执行到了sleep
书上的执行到start,cpu执行权被Thread-0抢走了

作者: 心镜逝水    时间: 2015-2-24 11:23
,,,,。,。。。
作者: ㏒假™面具    时间: 2015-2-24 18:13
这是Cpu执行权的问题。你可以在t7t.interrupt();下面加上一行Thread.sleep(longtime);就和书上一样了
作者: 菠菜树    时间: 2015-2-26 11:34
linuxpara910829 发表于 2015-2-24 01:43
这个跟你程序没关系 ,   跟你的cpu有关系,你开启了两个线程,先执行那个线程后执行那个线程cpu说了算。
  ...

明白了,非常谢谢,:handshake
作者: 菠菜树    时间: 2015-2-26 11:35
㏒假™面具 发表于 2015-2-24 18:13
这是Cpu执行权的问题。你可以在t7t.interrupt();下面加上一行Thread.sleep(longtime);就和书上一样了 ...

恩恩,是的,只要让线程稍微休眠一下就解决了,谢谢:handshake
作者: 菠菜树    时间: 2015-2-26 11:38
心镜逝水 发表于 2015-2-24 11:23
,,,,。,。。。

灌水小心被扣分。。。:lol
作者: ziyu0971    时间: 2015-2-26 12:28
linuxpara910829 发表于 2015-2-24 01:43
这个跟你程序没关系 ,   跟你的cpu有关系,你开启了两个线程,先执行那个线程后执行那个线程cpu说了算。
  ...

是的,回答的不错哦:D




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