/**
* 守护线程
*/
public class Daemons {
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
Thread d = new Thread(new Daemon());
d.setDaemon(true); //必须在启动线程前调用
d.start();
System.out.println("d.isDaemon() = " + d.isDaemon() + ".");
TimeUnit.SECONDS.sleep(1);
}
}
class DaemonSpawn implements Runnable {
public void run() {
while (true) {
Thread.yield();
}
}
}
class Daemon implements Runnable {
private Thread[] t = new Thread[10];
public void run() {
for (int i=0; i<t.length; i++) {
t[i] = new Thread(new DaemonSpawn());
t[i].start();
System.out.println("DaemonSpawn " + i + " started.");
}
for (int i=0; i<t.length; i++) {
System.out.println("t[" + i + "].isDaemon() = " +
t[i].isDaemon() + ".");
}
while (true) {
Thread.yield();
}
}
}
运行结果:
d.isDaemon() = true.
DaemonSpawn 0 started.
DaemonSpawn 1 started.
DaemonSpawn 2 started.
DaemonSpawn 3 started.
DaemonSpawn 4 started.
DaemonSpawn 5 started.
DaemonSpawn 6 started.
DaemonSpawn 7 started.
DaemonSpawn 8 started.
DaemonSpawn 9 started.
t[0].isDaemon() = true.
t[1].isDaemon() = true.
t[2].isDaemon() = true.
t[3].isDaemon() = true.
t[4].isDaemon() = true.
t[5].isDaemon() = true.
t[6].isDaemon() = true.
t[7].isDaemon() = true.
t[8].isDaemon() = true.
t[9].isDaemon() = true.
在第二版的664页,其中我看到这两个while() yield()(使任务一直处于让出线程的状态);
一直让出线程?这有什么意义呢?比如DaemonSpawn,这个任务 你让他平平静静的执行完不就好了吗?执行完
就解放线程了。Daemon中的while() yield(); 又有什么意义呢?main本来就只启动了一个线程来执行Daemon任务
那让他平平静静执行完不就好了吗。。。。。。。对角懵逼,线性懵逼啊
谁能系统的解释一下吗????
ps:最近在学线程,各位有什么方法,书籍,途径 介绍吗?看think in java看的好吃力
Daemon是驻留线程,目的是长期执行任务,如果一次就结束了,可能也就没有必要称其为Daemon了.
改成下面这样你可能就好理解了.