`
suk
  • 浏览: 8502 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

通过线程限制程序执行时间过长

    博客分类:
  • Java
阅读更多
前不久在项目实施中遇到这样的问题:在主系统A中需要调用外部系统B中的一段程序,但由于外部系统B极不稳定,导致主系统A为了等待外部系统B的响应需要很长时间,严重影响了主系统的正常运行。为了限制等待外部系统响应的时间,规定等待超过10秒定义为超时,所以就写了这样一段程序,如下:

主进程:
public class MainThread extends Thread {

    public void run() {
    	
    	try {
    		while(true)
    		{
        		System.out.println("[INFO]Main thread is running!");
    			sleep(100000);
    		}
		} 
    	catch (InterruptedException e) {
			//e.printStackTrace();
			System.out.println("[WARN]Main thread is interupt!");
		}
    	
    	function();
    }
    
    public void function() {
    	System.out.println("[INFO]Function is in Action!");
    }
    
	public static void main(String[] args) 
	{
		MainThread main = new MainThread();
		main.start();
		new TimedThread(main,10000).start();
	}

}

主进程中定义执行主体,以及中断后的超时处理程序。

超时进程:
public class TimedThread extends Thread {
	
	Thread mainThread;
	long waitTime;
	
	public TimedThread(Thread thread , long timed)
	{
		mainThread = thread;
		waitTime   = timed;
	}

	public void run()
	{
		try {
			sleep(waitTime);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		if(mainThread.isAlive())
		{
			System.out.println("[INFO]Main thread must be interrupted in a minute!");
			mainThread.interrupt();
		}
	}

}



超时进程中定义等待超时时间后,中断主进程。

Main中实例化主进程和超时进程并同时启动。主进程启动后,超时进程休息10秒后发现主进程仍然在运行,便中断主进程并抛出中断异常,主进程处理完中断异常后继续完成后面程序后停止。
分享到:
评论

相关推荐

    java通过线程控制程序执行超时(新)

    当一个线程运行时间过长,我们需要一种机制来中断它,这就是超时控制的目的。 超时控制通常可以通过两种方式实现:使用Future和Callable接口,或者使用中断机制。 1. Future和Callable接口: 当我们需要异步执行...

    限制某个程序在规定时间内运行

    8. **多线程编程**:为了不影响主程序的响应,限制程序运行时间的逻辑可能需要在单独的线程上执行。使用`Thread`类或者异步操作(如`async/await`关键字)可以帮助实现这一目标。 综上所述,实现"限制某个程序在...

    易语言多线程获取网络时间源码

    在计算机程序中,线程是程序执行的基本单元,一个进程可以包含多个线程。多线程允许程序同时执行多个不同的任务,提高了程序的并发性和效率。在易语言中,我们可以通过创建多个线程来同时执行获取网络时间的任务,以...

    在多线程的原理基础上设计的多线程应用程序设计—监控软件

    在单线程系统中,程序执行是顺序的,一次只能执行一个任务。而多线程则打破了这种限制,一个进程可以包含多个线程,每个线程都有自己的执行上下文,可以在不同的CPU核心上并行运行。这样,程序可以同时处理多个任务...

    Java多线程程序设计

    Java多线程程序设计是Java开发中的重要领域,它允许应用程序同时执行多个任务,从而提高系统资源的利用率和程序的响应速度。在Java中,多线程主要通过两种方式实现:继承Thread类和实现Runnable接口。 一、创建线程...

    Delphi多线程的安全问题分析及解决

    针对上述问题,可以通过以下几种方式来确保Delphi多线程程序的安全性: 1. **使用临界区(Critical Section)**:临界区是一种轻量级的同步机制,用于保护那些一次只能被一个线程访问的共享资源。通过使用`...

    C# 如何挂起线程、休眠线程和终止线程(源码例)

    线程是程序执行的流程,每个进程至少有一个线程。在多线程环境中,多个线程可以共享同一进程资源,从而提高应用程序的并发性能。C#中,我们可以使用System.Threading命名空间提供的Thread类来创建和管理线程。 1. *...

    POSIX多线程程序设计

    多线程编程是现代计算机系统中一个关键的概念,它允许程序同时执行多个任务,从而提高资源利用率和程序性能。《POSIX多线程程序设计》这本书深入探讨了在POSIX环境中如何有效地编写多线程程序。 首先,我们要理解...

    线程守护程序

    在计算机科学中,线程是操作系统分配处理器时间的基本单元,它是程序执行的最小逻辑单位。在多线程环境中,每个线程都有自己的生命周期,可以独立地执行任务。"线程守护程序"是一种特殊类型的线程,它的设计目的是...

    为什么我的程序运行了这么长时间

    5. **资源竞争**:在多线程环境中,多个线程争抢同一资源可能导致阻塞,延长程序运行时间。合理设计线程间的通信和资源访问策略,如锁、信号量等,能改善这种情况。 6. **I/O操作**:磁盘读写和网络通信通常是程序...

    《Win32多线程程序设计》配套代码

    通过深入研究《Win32多线程程序设计》的配套代码,你可以逐步掌握多线程编程的核心技术,从而编写出高效、稳定的多线程应用,无论是进行后台任务处理、用户界面响应还是高并发网络服务,都能游刃有余。

    线程池使用介绍用程序可以有多个线程,这些线程在休眠状态中需要耗费大量时间来等待事件发生。其他线程可能进入睡眠状态,并且仅定期被唤醒以轮循更改或更新状态信息,然后再次进入休眠状态

    2. 如果任务执行时间过长,可能导致其他任务长时间等待,这时应考虑使用单独的线程来避免阻塞线程池资源。 3. 当需要将线程绑定到特定的单线程单元(如UI线程)时,线程池中的线程是多线程单元,无法满足此类需求。 ...

    c#.net写的调用多线程小程序

    在IT行业中,多线程是程序设计中的一个重要概念,尤其在C#.NET框架下,它允许开发者创建并行处理的任务,提升程序的执行效率。本文将深入探讨如何使用C#.NET编写一个调用多线程的小程序,以及如何实现同时开启多个...

    嵌入式Linux应用程序开发第9章多线程编程

    在 Linux2.4 内核中,消除了这个线程个数的限制,并且允许在系统运行中动态地调整进程数上限。当时采用的是 LinuxThread 线程库,它对应的线程模型是“一对一”线程模型,也就是一个用户级线程对应一个内核线程,而...

    Win32多线程程序设计源码

    多线程技术允许一个程序同时执行多个独立的任务,从而提高程序的执行效率和响应性。本资源"Win32多线程程序设计源码"旨在帮助开发者深入理解和实践如何在Win32环境下编写多线程应用。 一、线程基础 在Windows系统中...

    socket短连接和长连接 多线程的应用

    这种方式可以避免单线程模型下,一个连接处理时间过长而阻塞其他连接的情况。 线程池(ThreadPool)是多线程编程中的优化手段,它可以预先创建一定数量的线程,当有任务到来时,从线程池中获取空闲线程进行执行,而...

    linux c++ 守护线程,判断程序是否运行,不存在就启动

    在本场景中,我们要实现的功能是通过守护线程来检查一个程序(假设为`target_program`)是否正在运行,如果未运行,则启动该程序。以下是如何在C++中实现这个功能的详细步骤: 1. **创建守护线程**: 在C++中,...

    java线程程序实例

    Java线程程序实例是Java编程中的重要组成部分,它允许程序同时执行多个任务,提升系统效率。在多线程环境中,我们需要关注线程的同步、死锁以及锁机制,这些都是Java并发编程的关键知识点。 首先,线程是操作系统...

    多任务多线程并行运行,限制总线程数

    在IT领域,多任务多线程并行运行是提高程序执行效率的重要手段。尤其是在现代计算机系统中,处理器的多核架构使得并发执行多个线程成为可能,从而充分利用硬件资源,缩短程序整体的运行时间。然而,无节制地创建线程...

Global site tag (gtag.js) - Google Analytics