`
ontheway_lyl
  • 浏览: 44727 次
社区版块
存档分类
最新评论

java两个线程互相守护

    博客分类:
  • java
阅读更多

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多线程的线程守护两个例子_.docx

    java实现守护进程,有单独的监听进程, 两个或多个进程,两个或多个jvm

    java实现守护进程,有单独的监听进程, 两个或多个进程,两个或多个jvm java -jar heshenboot.jar start|stop

    Java多线程守护线程

     在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)  作用  Daemon的作用是为其他线程的运行提供便利服务,守护线程典型的应用是 GC (垃圾回收器),它是一个很称职的守护者。  区别  ...

    Java 守护线程,看这篇文章就对了! ( Daemon Thread )

    Java 提供了两种类型的线程:守护线程 和 用户线程 用户线程 (User Thread) 是高优先级线程。JVM 会在终止之前等待任何用户线程完成其任务。 守护线程 (Daemon Thread) 是低优先级线程。其唯一作用是为用户线程提供...

    java基础知识线程讲解和练习

    Java线程是Java语言中一个非常重要的概念...在Java中,线程有两种类型:用户线程和守护线程。用户线程是程序显式创建和控制的线程,而守护线程是在后台运行的特殊线程,用于执行一些后台任务,如垃圾回收、资源管理等。

    Java并发编程示例(七):守护线程的创建和运行

    主要介绍了Java并发编程示例(七):守护线程的创建和运行,在本节示例中,我们将创建两个线程,一个是普通线程,向队列中写入事件,另外一个是守护线程,清除队列中的事件,需要的朋友可以参考下

    JAVA最新面试资料-备战2023金三银四

    java 中的线程分为两种:守护线程(Daemon)和用户线程(User)。任 何线程都可以设置为守护线程和用户线程,通过方法 Thread.setDaemon(boolon);true 则把该线程设置为守护线程,反之则为用户线程。 Thread....

    java jdk实列宝典 光盘源代码

    一个支持多线程的服务器框架,GeneralServer.java; 代理服务器,ProxyServer.java; telnet客户端,访问系统的telnet服务实质上是与telnet服务建立socket连接,默认的telnet服务的端口是23,TelnetClient.java; ...

    Java常见面试题208道.docx

    3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 4.final 在 java 中有什么作用? 5.java 中的 Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们...

    实战Java高并发程序设计(第2版)PPT模板.pptx

    1走入并行世界 1.1何去何从的并行计算 1.2你必须知道的几个概念 1.3并发级别 1.4有关并行的两个重要定律 1.5回到java:jmm 1.2你必须知道的几个概念 1.3并发级别 1.4有关并行的两个重要定律 1.5回到Java:JMM 实战...

    java中JVM的原理

    Java虚拟机的生命周期一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。...Java中的线程分为两种:守护线程(daemon)和普通线程(non-daemon)。守护线程是Java虚拟机自己使用的线程,比如负

    java范例开发大全源代码

     实例1 开发第一个Java程序 7  第2章 Java基础类型与运算符(教学视频:39分钟) 9  2.1 基础类型 9  实例2 自动提升 9  实例3 自动转换 10  实例4 常用基础类型之强制转换 11  2.2 运算符 12 ...

    java范例开发大全

    实例229 变形金刚中的守护神(守护线程) 424 实例230 查看JVM中所有的线程的活动状况 426 实例231 模仿网络快车下载工具下载文件 428 13.2 多线程的同步与互斥 436 实例232 多线程同步方法的实例 436 实例233 ATM...

    Java范例开发大全 (源程序)

     实例1 开发第一个Java程序 7  第2章 Java基础类型与运算符(教学视频:39分钟) 9  2.1 基础类型 9  实例2 自动提升 9  实例3 自动转换 10  实例4 常用基础类型之强制转换 11  2.2 运算符 12  实例5...

    史上最全java面试,103项重点知识,带目录

    3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 3 4. final 在 java 中有什么作用? 4 5. java 中的 Math.round(-1.5) 等于多少? 4 6. String 属于基础的数据类型吗? 4 7. java 中操作字符串都...

    Java范例开发大全(全书源程序)

    实例256 带两个类型参数的泛型 513 实例257 有界类型程序示例 514 实例258 通配符使用示例 515 实例259 泛型方法使用示例 516 实例260 泛型接口示例 518 实例261 泛型实现坐标打印 519 14.2 泛型类的继承 521...

    java范例开发大全(pdf&源码)

    实例256 带两个类型参数的泛型 513 实例257 有界类型程序示例 514 实例258 通配符使用示例 515 实例259 泛型方法使用示例 516 实例260 泛型接口示例 518 实例261 泛型实现坐标打印 519 14.2 泛型类的继承 521 实例...

Global site tag (gtag.js) - Google Analytics