「java守护线教程」守护线程 java
本篇文章给大家谈谈java守护线教程,以及守护线程 java对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Java如何创建守护线程?
- 2、Java下实现守护进程方法是?
- 3、java里怎么理解守护线程在主线程结束后要过一会才结束?
- 4、java中关于守护线程的疑问?
- 5、如何设置java守护线程守护某一个线程
- 6、java题目,这道题用守护线程怎么做?
Java如何创建守护线程?
使用Thread类的setDaemon(true)方法可以将线程设置为守护线程,需要注意的是,需要在调用start()方法前调用这个方法,否则会抛出IllegalThreadStateException异常。
Java下实现守护进程方法是?
这个实际上就是执行某一段程序(不停的循环执行)。举例:
File f = new File("/home/xieping/job.log");//要守护的进程文件和路径
if (!f.exists()) {//如果守护的文件不存在了,直接重新创建一个
try {
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
while (true) {//一直执行这个循环
try {
BufferedWriter output = new BufferedWriter(new FileWriter(f));
output.write(new Date().toString());//写入需要的内容
output.close();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
Thread.sleep(1000 * 5);//定义循环的时间间隔是5秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
备注:通过main方法调用上面的代码,然后运行起来,不要停止这个程序,守护进程的创建就算完成了。
java里怎么理解守护线程在主线程结束后要过一会才结束?
一个守护线程什么时候结束不取决于主线程什么时候结束。守护线程的作用是在后台运行任务,只要还有一个以上非守护线程没有结束(即便此时主线程已结束),程序就不会结束。而程序没结束,守护线程当然还可以继续运行。
反过来,当所有非守护线程都结束了后,即便还有未结束的守护线程,系统也会马上结束这些守护线程,然后结束程序。
java中关于守护线程的疑问?
守护线程也叫精灵线程, 当程序只剩下 守护线程的时候 程序就会退出。
守护线程的作用 类似在后台静默执行 , 比如JVM的垃圾回收机制, 这个就是一个 守护线程。 而非守护线程则不会。
如何设置java守护线程守护某一个线程
守护线程与普通线程在表现上没有什么区别,我们只需要通过Thread提供的方法来设定即可:
void setDaemon(boolean )
当参数为true时该线程为守护线程。
守护线程的特点是,当进程中只剩下守护线程时,所有守护线程强制终止。
GC就是运行在一个守护线程上的。
需要注意的是,设置线程为后台线程要在该线程启动前设置。
Thread daemonThread = new Thread();
daemonThread.setDaemon(true);
daemonThread.start();
java题目,这道题用守护线程怎么做?
守护线程需要将指定线程的setDaemon()置为true,整体代码为:
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("main线程启动");
//设置main线程退出监听线程,当maim线程真正结束时,会打印该日志
Runtime.getRuntime().addShutdownHook(new Thread(() - System.out.println("main开始退出")));
//设置线程1,死循环,每3秒输出一个随机整数
Thread thread1 = new Thread(() - {
System.out.println("线程1启动");
while (true) {
Random random = new Random();
System.out.println("线程1输出随机整数:[" + random.nextInt(100) + "]");
try {
Thread.sleep(3 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread1.setDaemon(true);//守护线程1
//设置线程2,监听“Q”命令,收到命令后线程2结束
Thread thread2 = new Thread(() - {
System.out.println("线程2启动");
Scanner in = new Scanner(System.in);
String command = "";
while (!"Q".equals(command)) {
System.out.println("线程2等待输入");
command = in.nextLine();
System.out.println("线程2输入:[" + command + "]");
}
System.out.println("线程2收到终止命令,线程2已结束");
});
thread1.start();
thread2.start();
System.out.println("main线程结束,等待子线程结束");
}
}
关键在于第23行:thread1.setDaemon(true);//守护线程1
我们分析一下我的这段代码,main函数启动后,会先后开始执行线程1和线程2,之后main线程结束,等待所有子线程结束后,main线程即可退出,同时关闭jvm。
我们先看一下如果线程1没有设置为守护线程会咋样,可以看到,线程1是一个死循环,它自己是永远不会主动结束的,线程2则是当输入“Q”命令后,跳出while循环,结束线程2。
运行一下没有守护线程1的情况:
运行后,线程1一直在输出整数,线程2收到“Q”命令后也结束了,但是线程1还是在输出,main线程也无法停止,jvm将一直存在下去。
现在再运行守护线程1的情况:
线程2收到“Q”命令后,线程2结束,此时由于线程1被守护,main线程开始退出,之后,jvm关闭,守护线程1被自动回收。
关于java守护线教程和守护线程 java的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-22,除非注明,否则均为
原创文章,转载请注明出处。