Java后台线程
来源:互联网 发布:三国志9优化伴侣详解 编辑:程序博客网 时间:2024/05/19 22:49
java线程在http://blog.csdn.net/okiwilldoit/article/details/50801321 已经介绍了,可以用继承Thread类或者实现Runable接口来定义一个自己的线程。本文介绍java线程的分类。
java线程可以分为用户线程(也称前台线程或普通线程)和后台线程(Daemon thread);
后台线程并不属于程序中不可或缺的部分,当所有的非后台线程结束时,程序也就终止了,同时会杀死所有后台线程。
两者的区别是:
后台线程会随着主程序的结束而结束,但是用户进程则不会;或者说,只要有一个用户线程未退出,进程就不会终止;
后台线程在不执行finally子句的情况下就会终止其run方法。后台线程创建的子线程也是后台线程。
默认情况下,程序员创建的线程是用户线程;用setDaemon(true)可以设置线程为后台线程;而用isDaemon( )则可以判断一个线程是前台线程还是后台线程;
jvm的垃圾回收器其实就是一个后台线程;
setDaemon函数必须在start函数之前设定,否则会抛出IllegalThreadStateException异常;
实例一代码:
线程类:
public class DaemonDemo implements Runnable{ public void run() { try { while (true) { Thread.sleep(1000); System.out.println("#" + Thread.currentThread().getName()); } } catch (InterruptedException e) { e.printStackTrace(); } finally {// 后台线程不执行finally子句 System.out.println("finally "); } }}
主程序:
public static void main(String[] args) { for (int i = 0; i < 5; i++) { Thread daemon = new Thread(new DaemonDemo()); // 必须在start之前设置为后台线程 daemon.setDaemon(true); daemon.start(); } System.out.println("All daemons started"); try { TimeUnit.MILLISECONDS.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }}
输出结果:
All daemons started#Thread-3#Thread-4#Thread-0#Thread-2#Thread-1
可以看出,后台线程的while循环并未一直执行下去,而是随着主进程的结束,而退出了。同时主程序结束,后台线程中的finally里的代码也不会执行。
实例二代码:
上文是设置单个线程为后台线程,下面的代码是设置线程池中的线程全部为后台线程。
ExecutorService threadPool = Executors.newCachedThreadPool(new ThreadFactory() { public Thread newThread(Runnable r) { Thread t = Executors.defaultThreadFactory().newThread(r); t.setDaemon(true); return t; } });for(int i=0; i<5; i++) { threadPool.execute(new DaemonDemo());}
阅读全文
0 0
- Java守护线程(后台线程)
- java中的后台线程
- java后台线程处理
- Java中的后台线程
- Java后台线程Daemon
- Java后台线程
- Java多线程后台线程
- java 后台线程
- Java后台线程
- java 线程后台运行示例
- JAVA 用户线程,后台进程
- Java多线程五:后台线程
- java前台线程和后台线程
- java前台线程和后台线程
- Java线程 - 后台线程 daemon thread
- java前台线程和后台线程
- java中线程的前台线程和后台线程
- Java的前台线程与守护线程(后台线程)
- minicom使用
- java小数精确计算
- Python基础-def函数
- js实现观察者模式
- 文章标题
- Java后台线程
- 220元建站方案:COM域名+速成网站创业版(10G阿里云空间)
- Android启动线程的四种方式
- SpringMVC之RequestMapping注解详解
- Cyclic Nacklace(KMP之找寻环节)
- 为什么你只是一个小码农
- Eclipse中 更新maven项目步骤
- Android图片缓存之Glide进阶
- 独家微信域名封杀检测接口