A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蒋朝权 黑马帝   /  2011-9-21 17:19  /  2058 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请多多指教,新手还有很多地方不懂,多线程中,后台线程和前台线程的区别?

3 个回复

倒序浏览
黑马网友  发表于 2011-9-21 18:25:49
沙发
:)  在Java中的线程,包括前台线程(用户线程)和后台线程(守护线程)。当Java程序中只剩下后台线程运行时,整个Java程序随即退出。相反,但还有前台线程在运行前,整个Java程序仍保持运行。当线程产生而开始进行的时候,默认是作为前台线程运行的。

      让线程成为后台线程的方法是:在Thread对象调用start()方法前,先调用Thread对象的setDaemon(true)方法。其中若参数为false则让其成为前台线程。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
后台线程:指为其他线程提供服务的线程,也称为守护线程。JVM的垃圾回收线程就是一个后台线程。
前台线程:是指接受后台线程服务的线程,其实前台后台线程是联系在一起,就像傀儡和幕后操纵者一样的关系。傀儡是前台线程、幕后操纵者是后台线程。由前台线程创建的线程默认也是前台线程。可以通过isDaemon()和setDaemon()方法来判断和设置一个线程是否为后台线程。
使用Thread建立的线程默认情况下是前台线程,在进程中,只要有一个前台线程未退出,进程就不会终止。主线程就是一个前台线程。而后台线程不管线程是否结束,只要所有的前台线程都退出(包括正常退出和异常退出)后,进程就会自动终止。一般后台线程用于处理时间较短的任务,如在一个Web服务器中可以利用后台线程来处理客户端发过来的请求信息。而前台线程一般用于处理需要长时间等待的任务,如在Web服务器中的监听客户端请求的程序,或是定时对某些系统资源进行扫描的程序。下面的代码演示了前台和后台线程的区别。

public static void myStaticThreadMethod()
{
    Thread.Sleep(3000);
}
Thread thread = new Thread(myStaticThreadMethod);
// thread.IsBackground = true;
thread.Start()
如果运行上面的代码,程序会等待3秒后退出,如果将注释去掉,将thread设成后台线程,则程序会立即退出
要注意的是,必须在调用Start方法之前设置线程的类型,否则一但线程运行,将无法改变其类型
通过BeginXXX方法运行的线程都是后台线程。
这是我的总结,希望你有用。
[ 本帖最后由 宋红旺 于 2011-09-21  21:48 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-29 18:21:58
板凳
当运行的线程都是后台线程(守护线程)时,java虚拟机退出,程序终止。
一般后台线程是为前台线程服务的,如果没有了前台线程,后台线程也没有存在的意义了。
若想把一个线程设为后台线程(守护线程),在线程对象调用.start()方法前,调用.setDaemon(true),就把线程设为后台线程了,当所有的前台线程终止后,后台线程终止,程序退出。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马