Java后台线程操作示例【守护线程】

作者:cakincqm 时间:2023-11-25 01:35:44 

本文实例讲述了Java后台线程操作。分享给大家供大家参考,具体如下:

一 点睛

有一种线程,它是后面运行的,它的任务是为其他线程提供服务,这种线程被称为“后台”线程,又称为“守护线程”或“精灵线程”。JVM的垃圾回收线程就是典型的后台线程。

后台线程有个特征:如果所有的前台线程都死亡,后台线程会自动死亡,

调用Thread对象的setDaemon(true)方法可将指定线程设置成后台线程,所有的前台线程都死亡时,后台线程随之死亡。当整个虚拟机中只剩下后台线程时,程序就没有继续运行的必要了,虚拟机也就退出了。

二 代码


public class DaemonThread extends Thread
{
  // 定义后台线程的线程执行体与普通线程没有任何区别
  public void run()
  {
     for (int i = 0; i < 1000 ; i++ )
     {
       System.out.println(getName() + " " + i);
     }
  }
  public static void main(String[] args)
  {
     DaemonThread t = new DaemonThread();
     // 将此线程设置成后台线程
     t.setDaemon(true);
     // 启动后台线程
     t.start();
     for (int i = 0 ; i < 10 ; i++ )
     {
       System.out.println(Thread.currentThread().getName()
          + " " + i);
     }
     // -----程序执行到此处,前台线程(main线程)结束------
     // 后台线程也应该随之结束
  }
}

三 运行

main  0
Thread-0  0
main  1
Thread-0  1
main  2
Thread-0  2
main  3
Thread-0  3
main  4
Thread-0  4
main  5
Thread-0  5
main  6
Thread-0  6
main  7
Thread-0  7
main  8
Thread-0  8
main  9
Thread-0  9
Thread-0  10
Thread-0  11
Thread-0  12
Thread-0  13
Thread-0  14
Thread-0  15
Thread-0  16
Thread-0  17
Thread-0  18

四 说明

上面程序中先将t线程设置成后台线程,然后启动该线程,本来该线程应该执行到i等于999才会结束,但从结果不难发现,该后台线程无法运行到999,因为当主线程也就是程序唯一的前台线程运行结束后,JVM会主动退出,因而后台线程也就被结束了。

主线程默认是前台线程,t线程默认也是前台线程。并不是所有的线程默认都是前台线程,有些线程默认就是后台线程——前台线程创建的子线程默认是前台线程,后台线程创建的子线程默认是后台线程。

setDaemon(true)必须在start()方法之前调用,否则会引发异常。

更多java相关内容感兴趣的读者可查看本站专题:《Java进程与线程操作技巧总结》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

来源:https://blog.csdn.net/chengqiuming/article/details/90573992

标签:Java,后台线程,守护线程
0
投稿

猜你喜欢

  • JVM之方法返回地址详解

    2022-05-02 07:58:27
  • Android通过记住密码功能学习数据存储类SharedPreferences详解及实例

    2023-05-21 21:37:49
  • 关于RedisTemplate之opsForValue的使用说明

    2023-07-09 16:53:04
  • 用java实现跳动的小球示例代码

    2021-09-13 11:41:34
  • C#读写文本文件的方法

    2022-02-01 15:20:51
  • 详解Java注解知识点

    2021-06-24 18:39:12
  • Android IdleHandler使用方法详解

    2023-11-17 20:48:11
  • Spring Boot 与 kotlin 使用Thymeleaf模板引擎渲染web视图的方法

    2022-12-26 21:09:44
  • Android获得所有存储设备位置的最佳方法

    2022-06-27 21:08:51
  • 使用Feign调用注解组件(实现字段赋值功能)

    2023-01-06 15:19:59
  • Unity 通过LineRenderer绘制两点之间的直线操作

    2021-08-04 04:15:08
  • C#编程和Visual Studio使用技巧(上)

    2021-10-01 00:54:27
  • 出现SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“.的解决方法

    2021-09-01 12:02:09
  • flutter实现底部导航栏切换

    2023-05-30 14:43:40
  • Android开发之开关按钮用法示例

    2021-12-24 22:16:11
  • java 生成有序账号的实现方法

    2023-08-12 03:28:01
  • 学生信息管理系统java版

    2023-06-16 15:48:10
  • Spring容器中添加bean的5种方式

    2023-03-23 03:03:15
  • Springboot2.x+ShardingSphere实现分库分表的示例代码

    2023-11-26 01:34:07
  • 关于Mybatis与JPA的优缺点说明

    2023-08-23 22:28:33
  • asp之家 软件编程 m.aspxhome.com