Jea*_*ean 7 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());
}
}
Run Code Online (Sandbox Code Playgroud)
我期待的输出是它将打印
当前线程:线程[main,5,main]
当前线程:线程[Fred,5,main]
当前线程:线程[main,5,main]
这个结果我可以理解,我只创建了一个线程,即Thread Fred.其他两个run方法调用就像调用普通方法一样.
但我无法理解的是,当我执行相同的程序时,我得到以下输出.所以任何人都可以向我解释为什么它会像这样.
当前线程:线程[main,5,main]
当前线程:线程[Fred,5,main]
Mar*_*eel 10
你打电话Thread.run()(你通常不应该直接打电话),如果Thread已完成并自行清理,则无效:
Run Code Online (Sandbox Code Playgroud)@Override public void run() { if (target != null) { target.run(); } }来源:Java 7更新79
target提供的runnable 在哪里.该字段target设置为null线程结束时:
Run Code Online (Sandbox Code Playgroud)/** * This method is called by the system to give a Thread * a chance to clean up before it actually exits. */ private void exit() { if (group != null) { group.threadTerminated(this); group = null; } /* Aggressively null out all reference fields: see bug 4006245 */ target = null; /* Speed the release of some of these resources */ threadLocals = null; inheritableThreadLocals = null; inheritedAccessControlContext = null; blocker = null; uncaughtExceptionHandler = null; }来源:Java 7更新79
所以确切的输出(包括顺序,如果你得到两个或三个消息)取决于时间,调度等.
| 归档时间: |
|
| 查看次数: |
140 次 |
| 最近记录: |