当前位置: 代码迷 >> J2SE >> 菜鸟的Thread有关问题。求解
  详细解决方案

菜鸟的Thread有关问题。求解

热度:6022   发布时间:2013-02-25 00:00:00.0
初学者的Thread问题。求解啊
下面的程序为何执行runs2.sleep(5000);是main线程sleep 5 秒而不是子线程sleep 5秒啊,runs2是一个子线程啊对吧;

还有一个,能不能再main()里面让子线程sleep啊;怎么弄

import java.util.*;

public class TestInterrupt {
  public static void main(String[] args) {
  Runs2 runs2 = new Runs2();
  runs2.start();
  try {
  runs2.sleep(5000);
  } catch(InterruptedException e) {
   
  }
  runs2.interrupt();
  }
}
class Runs2 extends Thread {
  boolean flag = true;
   
  public void run() {
   
  while(flag) {
  try {
  System.out.println("----"+new Date()+"----");
  sleep(500);
  } catch(InterruptedException e) {
  flag = false;
  }
  }
   
  }
}

------解决方案--------------------------------------------------------
Java code
import java.util.*;public class s {    public static void main(String[] args) {        Runs2 runs2 = new Runs2();        runs2.start();        try {            /*static void sleep(int i) ,可见,sleep是静态方法,而静态方法跟对象(如Runs2)是没直接关系的,            但也仍可以使用 对象.sleep(5000 )方法,不过那等效于Thread.currentThread().sleep(5000); (当前线程睡5秒)            静态方法的存在只和类有直接关系,所以也等效于( Thread.sleep(5000) )            而现在的try语句块是在main中,而不是Run2的代码块中,所以睡的就是main了。            核心问题就在于static 方法是依赖于类,而独力于对象的,也就是说没有对象仍旧能使用sleep(5000)只有在一个类里            声明他是static 方法,那就可以用    类名.静态方法()  来直接调用,这是很重要的基础知识;            */            Thread.sleep(2500);            Thread.currentThread().sleep(2500);//            所以上面两行代码和你的run2.sleep(5000);是等效的        } catch (InterruptedException e) {        }        runs2.interrupt();    }}class Runs2 extends Thread {    boolean flag = true;    public void run() {        while (flag) {            try {                System.out.println("----" + new Date() + "----");                sleep(500);            } catch (InterruptedException e) {                flag = false;            }        }    }}
  相关解决方案