对线程行为有点困惑

时间:2016-03-16 15:12:42

标签: java multithreading

我在Thread中编写了一个基本代码,我得到的输出非常令人惊讶。

public class ThreadImp implements Runnable{

    public static void main(String[] args) {
        ThreadImp threadImp = new ThreadImp();
        Thread t =new Thread(threadImp);
        t.setName("Fred");
        t.start();
        threadImp.run();
        t.run();

    }
    public void run(){
        System.out.println("Current Thread: "+ Thread.currentThread());
    }
}

我期待的输出是打印

  

当前线程:线程[main,5,main]

     

当前线程:线程[Fred,5,main]

     

当前线程:线程[main,5,main]

这个结果我可以理解,我只创建了一个线程,即Thread Fred。其他两个run方法调用就像调用普通方法一样。

但我无法理解的是,当我执行相同的程序时,我得到以下输出。所以任何人都可以向我解释为什么它会像这样。

  

当前线程:线程[main,5,main]

     

当前线程:线程[Fred,5,main]

1 个答案:

答案 0 :(得分:10)

你拨打angular.module('myApp') .controller('AuthController', ['$scope','validateResponse', function($scope,validateResponse){ console.log('validateResponse = ',validateResponse); ... (你通常不应该直接打电话),如果Thread.run()已完成并自行清理,则无效:

Thread
     

来源:Java 7更新79

@Override public void run() { if (target != null) { target.run(); } } 是提供的runnable。线程结束时,字段target设置为target

null
     

来源:Java 7更新79

因此确切的输出(包括顺序,如果你得到两条或三条消息)取决于时间,日程安排等。