当前位置: 代码迷 >> J2SE >> 问个Thread的小疑点
  详细解决方案

问个Thread的小疑点

热度:120   发布时间:2016-04-24 12:46:10.0
问个Thread的小问题
Java code
public class TestThread {    public static void main(String[] args){            MyThread t = new MyThread();            t.start();            System.out.println("3");    }}class MyThread extends Thread{    public void run(){       System.out.println("2");    }}

为什么结果是先3 再2,怎么样才能先2 再3 阿?
不用 t.run()

------解决方案--------------------
首先、先打印哪个是控制不了的
用join()可以解决你的问题
Java code
public class TestThread {    public static void main(String[] args){         MyThread t = new MyThread();         t.start();         try {            t.join();        } catch (InterruptedException e) {            e.printStackTrace();        }         System.out.println("3");      }}class MyThread extends Thread{    public void run(){       System.out.println("2");    }}
------解决方案--------------------
主线程执行完打印任务,MyThread还没获得系统分配的空闲,所以会像楼主的情况一样,2楼正解
------解决方案--------------------
Java code
public class TestThread {    public static void main(String[] args) {            MyThread t = new MyThread();            t.start();            t.setPriority(8);            System.out.println("3");    }}class MyThread extends Thread{    public void run(){       System.out.println("2");    }}
------解决方案--------------------
单纯的由执行时间所决定
main()要是从1打印到1000
那么 打印2 可能就出现在中间了

------解决方案--------------------
//main方法也是一个线程

Java codepublic class TestThread {
public static void main(String[] args){

MyThread t = new MyThread();
t.start();
try{
Thread。sleep(2000);//mian线程睡2秒,这样main线程会让
出CPU,接着t线程得到CPU控制权,打印2
}
System.out.println("3");
}
}
class MyThread extends Thread{
public void run(){
System.out.println("2");
}
这样就能先2 再打印3
}

  相关解决方案