jvm 有 Daemon,non-daemon 两种线程
来源:互联网 发布:做淘宝必须有团队 编辑:程序博客网 时间:2024/06/10 23:07
看见这两个,表示如何结束线程了, 即终止一个应用。
1》 non-daemon线程结束----强制daemon干活线程结束,不管它执行到哪里。
2》non-daemon线程结束---non-daemon干活线程执行完,自己结束。
3》non-daemon Excutor 管理所有的干活线程,也许是最好的一种方式结束所有线程。
(1) TimeUnit.SECONDS.sleep(10);
exec.shutdown();
mai()执行到sleep(10)-----non-daemon干活线程执行-----main()自然醒------main()执行exec.shutdown();----等待子当前干活线程执行完,结束应用
(2)exec.shutdown();
main()---执行到shutdown时-----继续执行子干活线程-----全部执行完----main()结束一个应用。
1、 daemon 线程(后台线程):jvm自己用,如一个线程自动执行垃圾收集。
A daemon thread is ordinarily a thread used by the virtual machine itself, such as a thread that performs garbage collection.
2、non-daemon 线程(前台线程):负责和用户打交道,如一个应用首先运行的是main()线程,然后main线程启动我们的写的方法。
The application, however, can mark any threads it creates as daemon threads.The initial thread of an application--the one that begins at main()--is a non-daemon thread.shezh
二、例子图形说明
1、main():non-Daemon
1》如果不设Daemon,main()在代码执行完后,执行干活线程。例子是 while(true) 死循环,不中断,也出不来,子干活线程一直处于执行中。
2》如果不设Daemon,main()在执行到几条语句后---让出cpu,干活线程执行,出不来,因为干活线程 while(true) 死循环。
2、干活线程设置Daemon,下面 有10个 干活线程,可以设置
睡觉时间输出结果干活线程执行数TimeUnit.MILLISECONDS.sleep(10)All daemons started没有一个干活线程执行
main线程自然醒,
占cpu,一个应用结束TimeUnit.MILLISECONDS.sleep(100)Thread[Thread-0,5,main] concurrency.SimpleDaemons@bb11f9
Thread[Thread-1,5,main] concurrency.SimpleDaemons@14e97b9
Thread[Thread-6,5,main] concurrency.SimpleDaemons@eb3e0a
Thread[Thread-2,5,main] concurrency.SimpleDaemons@18b7e50
Thread[Thread-4,5,main] concurrency.SimpleDaemons@24d19d 5个干活线程执行
main线程自然醒,
占cpu,一个应用结束
有时干活线程数执行不一样,有多有少,可能根据机器的进程执行和本应用的线程优先级有关。
1、设置daemon.setDaemon(true),main()线程sleep 阻塞,让出cpu,让子干活线程执行一会儿。
package concurrency;
import java.util.concurrent.TimeUnit;
import static net.mindview.util.Print.*;
public class SimpleDaemons implements Runnable {
public void run() {
try {
while (true) {
TimeUnit.MILLISECONDS.sleep(100);
print(Thread.currentThread() + " " + this);
}
} catch (InterruptedException e) {
print("sleep() interrupted");
}
}
public static void main(String[] args) throws Exception {
for (int i = 0; i < 10; i++) {
Thread daemon = new Thread(new SimpleDaemons());
daemon.setDaemon(true); // Must call before start()
daemon.start();
}
print("All daemons started");
TimeUnit.MILLISECONDS.sleep(100);
}
}
- jvm 有 Daemon,non-daemon 两种线程
- Daemon线程
- Daemon线程
- Daemon 线程
- daemon线程
- Daemon 线程
- Daemon线程
- daemon线程
- 这个主要是由于tomcat应用服务中有非daemon线程没有关闭。而根据jvm退出规则,只要有非daemon线程存在,jvm就不会退出 。
- Difference between Daemon and Non Daemon thread?
- daemon
- Daemon
- Daemon
- daemon
- daemon
- daemon
- daemon
- daemon
- Android性能优化之虚拟机调优
- C++学习之路C++Primer学习笔记(一)
- Android中关于cpu/cpuset/schedtune的应用
- 【进阶】从linux到android,进程的方方面面
- 关于 Android 进程保活,你所需要知道的一切
- jvm 有 Daemon,non-daemon 两种线程
- Android开发架构规范
- Android系统中的进程管理:进程的优先级
- Struts2中的session、request、respsonse获取方法
- Android系统中的进程管理:进程的创建
- Android系统中的进程管理:内存的回收
- [Unity&GameSparks]注册玩家信息分类无法添加
- 模拟摄像机和网络监控摄像机画面嵌入网页直播
- Codeforces514