爪哇2博客
爪哇2博客

爪哇中的守护线程示例

守护程序线程是低优先级后台线程,为用户线程提供服务。它’生命取决于用户线程。如果没有用户线程在运行,那么即使守护程序线程在运行,JVM也可以退出。 JVM不等待守护程序线程完成。
守护程序线程执行后台任务,例如垃圾回收,终结器等。
守护程序线程的唯一目的是为用户线程提供服务,因此,如果没有用户线程,则没有JVM可以运行这些线程,’s为什么在没有用户线程的情况下JVM退出。

与守护线程相关的两种方法

公共无效setDaemon(布尔状态):
此方法可用于将线程标记为用户线程或守护程序线程。如果放置setDaemon(true),它将使线程成为守护程序。
 
公共布尔isDaemon()
此方法可用于检查线程是否为守护程序。

守护程序线程示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
组织.Arpit.爪哇2blog;
 
SimpleThread 实施 可运行{
 
上市 虚空 ()
{
  如果(线.currentThread().isDaemon())
   系统..打印(线.currentThread().getName()+"  is daemon thread");
  其他
   系统..打印(线.currentThread().getName()+"  is user thread");
}
 
}
 
上市 DaemonThreadMain {
上市 静态的 虚空 主要([] args){  
  SimpleThread ST = SimpleThread();
    线 th1= 线(ST ,“线程1”);//创建线程
    线 th2= 线(ST ,“线程2”);  
    线 th3= 线(ST ,“线程3”);  
 
    th2.setDaemon(真正);//现在th2是守护程序线程  
 
    th1.开始();//启动所有线程  
    th2.开始();  
    th3.开始();  
   }  
}
 

当您运行上述程序时,将获得以下输出:

线程1是用户线程
线程3是用户线程
线程2是守护程序线程

请注意,启动后无法将用户线程转换为守护线程,否则它将抛出 IllegalThreadStateException.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
组织.Arpit.爪哇2blog;
 
SimpleThread 实施 可运行{
 
上市 虚空 ()
{
  如果(线.currentThread().isDaemon())
   系统..打印(线.currentThread().getName()+"  is daemon thread");
  其他
   系统..打印(线.currentThread().getName()+"  is user thread");
}
 
}
 
上市 DaemonThreadMain {
上市 静态的 虚空 主要([] args){  
  SimpleThread ST = SimpleThread();
    线 th1= 线(ST ,“线程1”);//创建线程
    线 th2= 线(ST ,“线程2”);  
    线 th3= 线(ST ,“线程3”);  
 
    th1.开始();//启动所有线程  
    th2.开始();  
    th3.开始();  
                  th2.setDaemon(真正);//现在在启动线程之后将用户线程转换为守护程序线程。
   }  
}
 

当您运行上述程序时,将获得以下输出:

线程1是线程中的用户threadException“main”
线程2是用户线程
线程3是用户线程
爪哇.lang.IllegalThreadStateException
在java.lang.Thread.setDaemon(Thread.java:1388)
在org.arpit.java2blog.DaemonThreadMain.main(DaemonThreadMain.java:28)


导入联系人

您可能还喜欢:

分享这个

作者

关注作者

相关文章

  • 获取Java中的线程ID
    9月30日

    获取Java中的线程ID

    在本文中,我们将学习获取Java中正在运行的线程的线程ID。 Id是在线程创建时生成的唯一正数。该ID在线程的生存期内保持不变。线程终止时,其ID可用于引用另一个线程,但是[…]

  • 爪哇中的ArrayBlockingQueue
    9月19日

    爪哇中的ArrayBlockingQueue

    在本文中,我们将了解Java并发队列BlockingQueue。然后我们将深入其中’其中之一的实现ArrayBlockingQueue。什么是BlockingQueue 阻塞队列接口是在Java 5中并发API下引入的,它表示一个线程安全的队列,可以在其中添加和删除元素。我们可以有 […]

  • 将Java程序延迟几秒钟
    12月11日

    将Java程序延迟几秒钟

    在这篇文章中,我们将看到如何将Java程序延迟几秒钟。在很多情况下,我们需要等待其他任务完成,因此我们需要延迟Java程序。有多种方法可以延迟Java程序的执行。使用Thread.sleep 睡觉方法会使当前线程暂停[…]

  • 29 May

    如何使用Java中的线程打印偶数和奇数

    在本文中,我们将看到如何使用Java中的线程打印偶数和奇数。另请参见:如何在Java中使用3个线程打印序列问题您将获得两个线程。您需要使用一个线程打印奇数,而使用另一线程打印偶数。您需要以自然顺序打印[…]

  • 爪哇中的wait(),notify()和notifyAll()
    10月22日

    为什么在对象类中使用wait(),notify()和notifyAll()方法

    在这篇文章中,我们将看到为什么wait(),notify()和notifyAll()方法在对象类中而不在线程类中。这是最常问到的Java多线程面试问题之一。您可能知道wait(),notify()和notifyAll()方法在Object类中,您知道相同的原因吗?让’s […]

  • 爪哇中的自定义BlockingQueue
    10月16日

    爪哇中的自定义BlockingQueue实现

    在本文中,我们将看到如何创建自己的自定义BlockingQueue。这是最常被问到的Java面试问题之一。您需要实现自己的BlockingQueue。这个问题有助于面试官对多线程概念有所了解。这是BlockingQueue的简单实现。我们将使用数组将元素存储在[…]

发表评论 取消回复

您的电子邮件地址不会被公开。 必需的地方已做标记 *

订阅我们的新闻

获取质量教程到您的收件箱。现在订阅。


成为朋友

©2020 爪哇2博客