[Java] 用户线程和守护线程
2012-10-21 19:04
706 查看
java线程可以分为两种:用户线程额守护线程。用户线程有时称为前台线程。我们在写程序时,把一些耗时的处理从主线程里面拿出来,放到单独的一个线程里面去执行,以免阻止主线程的运行,造成界面处于一种无响应状态,无法进行其他操作,这样的用户体验非常不好。一般我们在程序里面创建的线程都是用户线程,它们为程序所用,这些线程都必须正常的运行到结束,或者按照要求终止。
守护线程有时称为后台线程。我们在程序里面一般很少创建后台线程,它一般由JVM创建,默默的运行在后台,为系统或我们的程序提供一些服务。比如,定时检测对象的使用情况,计算一些对象的引用,在必要的时候执行一些对象的销毁和资源的回收。我们的程序一般不用去管它。
用户线程和守护线程在本质上其实没有太大的区别,只是应用场景不太一样。创建线程时,执行setDaemon(true),这样线程就成为了守护线程,一定要在线程启动前进行设置,否则后出现异常。另外,在守护线程里面创建的线程自动为守护线程,在用户线程里面创建的线程自动为用户线程。还有一点,就是只要有一个用户线程没有执行完,JVM都不会自动退出。但是,当所有的用户线程都运行完毕后,JVM就会自动退出,如果现在还有守护线程在运行,它们就会被立刻全部终止。换句话说,不能保证守护线程能运行完毕,当用户线程全部结束后,守护线程就会被JVM无情的终止掉。所以使用守护线程时要注意这一点。
一个简单的示例:
下面是运行结果:
用户线程地0执行!
守护线程地0执行!
守护线程地1执行!
用户线程地1执行!
守护线程地2执行!
用户线程地2执行!
守护线程地3执行!
用户线程地3执行!
守护线程地4执行!
用户线程地4执行!
守护线程地5执行!
如文章有错误之处,敬请提出,共同讨论!
守护线程有时称为后台线程。我们在程序里面一般很少创建后台线程,它一般由JVM创建,默默的运行在后台,为系统或我们的程序提供一些服务。比如,定时检测对象的使用情况,计算一些对象的引用,在必要的时候执行一些对象的销毁和资源的回收。我们的程序一般不用去管它。
用户线程和守护线程在本质上其实没有太大的区别,只是应用场景不太一样。创建线程时,执行setDaemon(true),这样线程就成为了守护线程,一定要在线程启动前进行设置,否则后出现异常。另外,在守护线程里面创建的线程自动为守护线程,在用户线程里面创建的线程自动为用户线程。还有一点,就是只要有一个用户线程没有执行完,JVM都不会自动退出。但是,当所有的用户线程都运行完毕后,JVM就会自动退出,如果现在还有守护线程在运行,它们就会被立刻全部终止。换句话说,不能保证守护线程能运行完毕,当用户线程全部结束后,守护线程就会被JVM无情的终止掉。所以使用守护线程时要注意这一点。
一个简单的示例:
public static void main(String[] args) { Thread t1 = new Thread(new Runnable(){ @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println("用户线程地" + i + "执行!"); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } }}); Thread t2 = new Thread(new Runnable(){ @Override public void run() { for (int i = 0; i < 50; i++) { System.out.println("守护线程地" + i + "执行!"); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } }}); t2.setDaemon(true); t1.start(); t2.start(); }
下面是运行结果:
用户线程地0执行!
守护线程地0执行!
守护线程地1执行!
用户线程地1执行!
守护线程地2执行!
用户线程地2执行!
守护线程地3执行!
用户线程地3执行!
守护线程地4执行!
用户线程地4执行!
守护线程地5执行!
如文章有错误之处,敬请提出,共同讨论!
相关文章推荐
- java线程分类:java线程分为用户线程和守护线程
- java 用户线程与守护线程
- Java用户线程和守护线程
- Java有两种线程分别是用户线程(UserThread)和守护线程(DaemonThread)
- 【java】用户线程和守护线程
- java开发之线程(守护线程daemon和用户线程User Thread)
- Java线程_守护线程和用户线程
- JAVA——守护线程或用户线程(setDaemon)
- Java之守护线程与用户线程
- java多线程之守护线程和用户线程
- Java中的守护线程和用户线程
- Java的用户线程与守护线程
- java中线程分两种,守护线程和用户线程。
- java 中守护线程与用户线程的区别
- java守护线程与用户线程的区别
- java中守护线程与用户线程
- 浅谈java中守护线程与用户线程
- Java的用户线程和守护线程
- java守护线程和用户线程
- 【java多线程】用户线程和守护线程的区别