日期:2014-05-20  浏览次数:20625 次

小弟初接触多线程,这段代码的输出不懂
Java code



public class MultThread extends Thread{
    String name;
    //初始化name变量
    public MultThread(String name){
        this.name=name;
    }
    //线程
    public void run(){
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            System.out.println("Interrupt exception");
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("thread name: "+name);
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Autgenerated method stub
        //创建多个线程
        MultThread mt1=new MultThread("one");
        MultThread mt2=new MultThread("two");
        MultThread mt3=new MultThread("three");
        mt1.start();
        mt2.start();
        mt3.start();
    

    }
    

}


输出结果是thread name: one
thread name: three
thread name: two





难道不应该输出,one two three么

------解决方案--------------------
多输出几次你会发现不是固定的。
------解决方案--------------------
这个是并发的,main是一个线程,还有你的3个线程,并发(不是同时)运行。我也不是特别懂,期待哪位大牛给解释一下。
------解决方案--------------------
线程的特点,启动后由虚拟机进行调度(java是抢占式的),所以输出不会固定的,多运行几次就能发现。
------解决方案--------------------
这个就是多线程的特点了,运行的次序不是固定的。
------解决方案--------------------
多运行几次,你会发现现线程是抢占资源的,具有随意性,并不会按照你的顺序执行