我在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]
答案 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
因此确切的输出(包括顺序,如果你得到两条或三条消息)取决于时间,日程安排等。