黑马程序员技术交流社区
标题:
守护线程没有运行
[打印本页]
作者:
刘勇强
时间:
2013-3-9 13:43
标题:
守护线程没有运行
本帖最后由 刘勇强 于 2013-3-9 13:45 编辑
class MyThread implements Runnable{
public void run(){
while(true){
System.out.println(Thread.currentThread().getName() + "在运行。") ;
}
}
};
public class ThreadDaemonDemo{
public static void main(String args[]){
MyThread mt = new MyThread() ;
Thread t = new Thread(mt,"线程");
t.setDaemon(true) ; // 此线程在后台运行
t.start() ; // 启动线程
}
};
复制代码
运行了n遍,总没有任何输出. 为什么守护线程没有输出呢?
作者:
BitmapFactory
时间:
2013-3-9 16:46
public class ThreadDaemonDemo{
public static void main(String[] args){
MyThread mt = new MyThread() ;
Thread t = new Thread(mt,"线程fffff");
t.setDaemon(true) ; // 此线程在后台运行
t.start() ; // 启动线程
int sum =0;
for(int i=1;i<1000000;i++){
sum +=i;
}
}
}
复制代码
将该线程标记为守护线程或用户线程。将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java 虚拟机退出。该方法必须在启动线程前调用。
当标记为守护线程时,由于你的代码主线程已经执行完了,而守护线程在这个过程中又没有抢到执行权,所以没有打印任务东西
将你的代码加入一些代码,让主线程多运行一会,就可以看到守护线程执行的东西了
守护线程的特点是开启后和其他线程共同抢夺CPU的执行权
开启和运行,和其他线程都没有区别,唯一的区别是当前台线程结束后守护线程也就结束了
作者:
范德农
时间:
2013-3-9 17:27
public class ThreadDaemonDemo{
public static void main(String[] args){
MyThread mt = new MyThread() ;
Thread t = new Thread(mt,"线程fffff");
t.setDaemon(true) ; // 此线程在后台运行
t.start() ; // 启动线程
//延长主线程执行时间
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
}
}
}
}
复制代码
是这样的,在你这段代码有两个线程,一个是自定义守护线程,一个是主线程(前台线程),而守护线程执行的代码是主线程的最后一行代码,即在守护线程还没得到执行权的时候,主线程很大几率可能就已经结束了,前台线程都结束了,守护线程自然会结束,不管它有没有执行。若想执行守护线程代码内容,可通过延长主线程执行线程来实现,所以我在上面的代码了,让主线程sleep了一下。
作者:
范德农
时间:
2013-3-9 17:29
机器有点卡,再发下代码
class MyThread implements Runnable{
public void run(){
while(true){
System.out.println(Thread.currentThread().getName() + "在运行。") ;
}
}
};
public class ThreadDaemonDemo{
public static void main(String args[]){
MyThread mt = new MyThread() ;
Thread t = new Thread(mt,"线程");
t.setDaemon(true) ; // 此线程在后台运行
t.start() ; // 启动线程
//延长主线程执行时间
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
}
}
};
复制代码
作者:
范德农
时间:
2013-3-9 17:29
机器有点卡,再发下代码
class MyThread implements Runnable{
public void run(){
while(true){
System.out.println(Thread.currentThread().getName() + "在运行。") ;
}
}
};
public class ThreadDaemonDemo{
public static void main(String args[]){
MyThread mt = new MyThread() ;
Thread t = new Thread(mt,"线程");
t.setDaemon(true) ; // 此线程在后台运行
t.start() ; // 启动线程
//延长主线程执行时间
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
}
}
};
复制代码
作者:
amen0205
时间:
2013-3-9 20:31
你用了setDeamon 就该知道 当程序 只有守护线程就会自动停止 当主线程一执行完 t.start(); 主线程就执行完了 程序就结束了 守护线程就执行不到了 就这么简单
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2