「java自动守护」java设置守护进程

博主:adminadmin 2022-12-24 00:51:10 63

本篇文章给大家谈谈java自动守护,以及java设置守护进程对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java什么时候会用到守护线程

当主线程结束时,结束其余的子线程(守护线程)自动关闭,就免去了还要继续关闭子线程的麻烦。如:Java垃圾回收线程就是一个典型的守护线程

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方法调用上面的代码,然后运行起来,不要停止这个程序,守护进程的创建就算完成了。

linux 如何实现java守护进程编程开发

可以通过GuardServer实现,具体代码如下;

 1 public class GuardServer {

 2     private String servername;

 3 

 4     public GuardServer(String servername) {

 5         this.servername = servername;

 6     }

 7 

 8     public void startServer(String cmd) throws Exception {

 9         System.out.println("Start Server : " + cmd);

10         //将命令分开

11 //        String[] cmds = cmd.split(" ");

12 //        ProcessBuilder builder = new ProcessBuilder(cmds);

13     

14         //

15         ProcessBuilder builder=new ProcessBuilder(new String[]{"/bin/sh","-c",cmd});

16         //将服务器程序的输出定位到/dev/tty

17         builder.redirectOutput(new File("/dev/tty"));

18         builder.redirectError(new File("/dev/tty"));

19         builder.start(); // throws IOException

20         Thread.sleep(10000);

21     }

22 

23     /**

24      * 检测服务是否存在

25      * 

26      * @return 返回配置的java程序的pid

27      * @return pid 0 返回的是 pid =0 代表指定java程序未运行

28      * **/

29     public int checkServer() throws Exception {

30         int pid = -1;

31         Process process = null;

32         BufferedReader reader = null;

33         process = Runtime.getRuntime().exec("jps -l");

34         reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

35         String line;

36         while ((line = reader.readLine()) != null) {

37             String[] strings = line.split("\\s{1,}");

38             if (strings.length  2)

39                 continue;

40             if (strings[1].contains(servername)) {

41                 pid = Integer.parseInt(strings[0]);

42                 break;

43             }

44         }

45         reader.close();

46         process.destroy();

47         return pid;

48     }

49 }

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守护线程守护某一个线程

守护线程与普通线程在表现上没有什么区别,我们只需要通过Thread提供的方法来设定即可:

void setDaemon(boolean )

当参数为true时该线程为守护线程。

守护线程的特点是,当进程中只剩下守护线程时,所有守护线程强制终止。

GC就是运行在一个守护线程上的。

需要注意的是,设置线程为后台线程要在该线程启动前设置。

Thread daemonThread = new Thread();

daemonThread.setDaemon(true);

daemonThread.start();

java中关于守护线程的疑问?

守护线程也叫精灵线程, 当程序只剩下 守护线程的时候 程序就会退出。

守护线程的作用 类似在后台静默执行 , 比如JVM的垃圾回收机制, 这个就是一个 守护线程。 而非守护线程则不会。

关于java自动守护和java设置守护进程的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-24,除非注明,否则均为首码项目网原创文章,转载请注明出处。