我在Android中测试Think的Java多线程:
private void testDeamon(){
Thread d = new Daemon();
System.out.println(
"d.isDaemon() = " + d.isDaemon());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public class Daemon extends Thread {
private static final int SIZE = 10;
private static final String TAG = null;
private int i = 9000;
private Thread[] t = new Thread[SIZE];
public Daemon() {
setDaemon(true);
start();
}
public void run() {
for(int i = 0; i < SIZE; i++)
t[i] = new DaemonSpawn(i);
for(int i = 0; i < SIZE; i++)
System.out.println(
"t[" + i + "].isDaemon() = "
+ t[i].isDaemon());
while(true) {
Log.d(TAG, "Deamon running..."+ i--);
if (i==0)
break;
yield();
}
}
class DaemonSpawn extends Thread {
public DaemonSpawn(int i) {
System.out.println(
"DaemonSpawn " + i + " started");
start();
}
public void run() {
while(true)
yield();
}
}
}
为什么spawn守护进程的结果为false,因此守护进程的spawn不是守护进程
为什么Daemon thead会在Android应用程序退出后继续运行?根据TIJ,在所有非deamon线程被杀死之后JVM退出并且deamon线程也退出。因此,应用程序销毁后JVM没有关闭?感谢。
答案 0 :(得分:2)
我无法回答第一个问题。它们也应该是守护进程(http://www.linuxtopia.org/online_books/programming_books/thinking_in_java/TIJ315_005.htm)
对于Android目的,守护程序线程或非守护程序线程没有实际意义。你的应用程序的进程永远不会退出:它要么保留在后台,要么在某些时候被杀死。
你的第二个问题: “... Android应用程序退出......”是什么意思?应用程序不会“退出”,它们只是进入后台,如果操作系统认为有必要,它们可能会被杀死。
换句话说,当您的应用进入后台时,它不会退出。它一直在后台运行(直到它在某个时刻被杀死)。