dota打累了写个小demo
最近由于工作需要,需要实现一个线程无论任何情况下都不能挂掉,就算挂掉了也必须继续运行该线程里的功能,想了一下其实也非常简单,无非就是两个线程互相守护,两个线程里实现同样的功能,线程A挂了启动线程B,线程B挂了启动线程A,好了废话不多说,直接上代码:
package com.thread.daemon.test; import java.util.ArrayList; import java.util.List; /** * 两个线程互相守护,线程A挂了启动线程B,线程B挂了启动线程A * @author liangjian */ public class ThreadDaemonTest { static List<String> list = new ArrayList<>(); static Thread threadA ; static Thread threadB ; public static void threadDaemonA(){ threadA = new Thread(new Runnable() { boolean flag = true; int count = 0; @Override public void run() { threadA.setName("threadDaemonA "); while(flag){ try { threadA.sleep(1000); } catch (InterruptedException e1) { e1.printStackTrace(); flag = false; Thread.currentThread().interrupt(); threadA = null; threadDaemonB(); }finally{ } count++; System.out.println(threadA.getName()+count+ " <--> threadB = "+threadB); if(count == 10){ System.err.println(count); try { String temp = list.get(0); } catch (Exception e) { e.printStackTrace(); threadDaemonB(); flag = false; Thread.currentThread().interrupt(); threadA = null; return; }finally{ } } } } }); threadA.start(); } public static void threadDaemonB(){ threadB = new Thread(new Runnable() { boolean flag = true; int count = 0; @Override public void run() { threadB.setName("threadDaemonB "); while(flag){ try { threadB.sleep(1000); } catch (InterruptedException e1) { e1.printStackTrace(); flag = false; Thread.currentThread().interrupt(); threadB = null; threadDaemonA(); } count++; System.out.println(threadB.getName()+count+" <--> threadA = "+threadA); if(count == 10){ try { String temp = list.get(0); return ; } catch (Exception e) { e.printStackTrace(); flag = false; threadB = null; Thread.currentThread().interrupt(); threadDaemonA(); }finally{ } } } } }); threadB.start(); } public static void main(String[] args) { threadDaemonA(); } }
相关推荐
Java多线程的线程守护两个例子_.docx
java实现守护进程,有单独的监听进程, 两个或多个进程,两个或多个jvm java -jar heshenboot.jar start|stop
在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 作用 Daemon的作用是为其他线程的运行提供便利服务,守护线程典型的应用是 GC (垃圾回收器),它是一个很称职的守护者。 区别 ...
Java 提供了两种类型的线程:守护线程 和 用户线程 用户线程 (User Thread) 是高优先级线程。JVM 会在终止之前等待任何用户线程完成其任务。 守护线程 (Daemon Thread) 是低优先级线程。其唯一作用是为用户线程提供...
Java线程是Java语言中一个非常重要的概念...在Java中,线程有两种类型:用户线程和守护线程。用户线程是程序显式创建和控制的线程,而守护线程是在后台运行的特殊线程,用于执行一些后台任务,如垃圾回收、资源管理等。
主要介绍了Java并发编程示例(七):守护线程的创建和运行,在本节示例中,我们将创建两个线程,一个是普通线程,向队列中写入事件,另外一个是守护线程,清除队列中的事件,需要的朋友可以参考下
java 中的线程分为两种:守护线程(Daemon)和用户线程(User)。任 何线程都可以设置为守护线程和用户线程,通过方法 Thread.setDaemon(boolon);true 则把该线程设置为守护线程,反之则为用户线程。 Thread....
一个支持多线程的服务器框架,GeneralServer.java; 代理服务器,ProxyServer.java; telnet客户端,访问系统的telnet服务实质上是与telnet服务建立socket连接,默认的telnet服务的端口是23,TelnetClient.java; ...
3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 4.final 在 java 中有什么作用? 5.java 中的 Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们...
1走入并行世界 1.1何去何从的并行计算 1.2你必须知道的几个概念 1.3并发级别 1.4有关并行的两个重要定律 1.5回到java:jmm 1.2你必须知道的几个概念 1.3并发级别 1.4有关并行的两个重要定律 1.5回到Java:JMM 实战...
Java虚拟机的生命周期一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。...Java中的线程分为两种:守护线程(daemon)和普通线程(non-daemon)。守护线程是Java虚拟机自己使用的线程,比如负
实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 ...
实例229 变形金刚中的守护神(守护线程) 424 实例230 查看JVM中所有的线程的活动状况 426 实例231 模仿网络快车下载工具下载文件 428 13.2 多线程的同步与互斥 436 实例232 多线程同步方法的实例 436 实例233 ATM...
实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5...
3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 3 4. final 在 java 中有什么作用? 4 5. java 中的 Math.round(-1.5) 等于多少? 4 6. String 属于基础的数据类型吗? 4 7. java 中操作字符串都...
实例256 带两个类型参数的泛型 513 实例257 有界类型程序示例 514 实例258 通配符使用示例 515 实例259 泛型方法使用示例 516 实例260 泛型接口示例 518 实例261 泛型实现坐标打印 519 14.2 泛型类的继承 521...
实例256 带两个类型参数的泛型 513 实例257 有界类型程序示例 514 实例258 通配符使用示例 515 实例259 泛型方法使用示例 516 实例260 泛型接口示例 518 实例261 泛型实现坐标打印 519 14.2 泛型类的继承 521 实例...