原理:增加一个线程类用于监控目标类即可,代码如下:
package aa;
import java.util.Vector;
public class SomeoneThread extends Thread implements ISomeoneThread{
/**
* @param args
*/
public static void main(String[] args) {
SomeoneThread thread = new SomeoneThread();
thread.start();
TimeoutManager manager = new TimeoutManager();
manager.vector.add(thread);
manager.start();
}
@Override
public void run() {
super.run();
startTime = System.currentTimeMillis();
int i = 0;
while(isRunning()){
System.out.println("vlaue:" + i++ );
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// 运行标识
private boolean running = true;
// 目标类的启动时间
private long startTime;
public boolean timeout() {
long currentTime = System.currentTimeMillis();
// 表示当运行超时,例如10s
if ( (currentTime - startTime) < 10000 ){
return false;
}
return true;
}
public synchronized boolean isRunning() {
return running;
}
public synchronized void setRunning(boolean running) {
this.running = running;
}
}
class TimeoutManager extends Thread {
public Vector vector = new Vector();
public boolean running = true;
@Override
public void run() {
super.run();
while(running){
for ( int i = 0; i< vector.size();i++){
Object obj = vector.get(i);
if ( obj instanceof ISomeoneThread){
if ( ((ISomeoneThread)obj).timeout()){
((SomeoneThread)obj).setRunning(false);
System.out.println("timeout");
running = false;
}
}
}
}
}
}
interface ISomeoneThread {
public boolean timeout();
}
分享到:
相关推荐
当一个线程运行时间过长,我们需要一种机制来中断它,这就是超时控制的目的。 超时控制通常可以通过两种方式实现:使用Future和Callable接口,或者使用中断机制。 1. Future和Callable接口: 当我们需要异步执行...
- 超时处理逻辑需写在线程外部,不如第一种方法灵活。 #### 四、总结 通过上述两种方法,我们可以有效地实现Java线程的超时控制。选择合适的方法取决于具体的应用场景和个人偏好。对于需要精细控制某段代码执行时间...
另外,`java.lang.Thread`类也提供了一种实现线程超时的方法,通过使用`join`方法。`join`可以等待某个线程结束,同时可以设置一个等待时限。 ```java Thread thread = new Thread(() -> { // 需要监控的线程代码 ...
`ExecutorService`是Java并发包`java.util.concurrent`的一部分,它提供了一种提交任务并管理线程池的方式。我们可以使用`submit()`方法提交一个`Callable`任务,它返回一个`Future`对象,`Future`提供了检查任务...
这提供了一种灵活的方式来管理和控制异步任务,使其具备超时取消的能力。 总的来说,通过结合`BlockingQueue`、`newFixedThreadPool`和`FutureTask`,我们可以构建一个高效、可扩展且具备超时控制功能的异步任务...
线程池模式是一种管理线程的技术,它预先创建了一组线程,当有新的任务需要执行时,线程池会从池中选择一个空闲线程来执行任务,而不是每次都创建新线程。这样可以减少线程创建和销毁的开销,提高系统响应速度。...
标题中的“向指定线程插入异常,以便控制线程行为”是一种高级的线程控制技术,主要用于在运行时改变线程的行为。以下是对这个技术的详细解释: 线程控制是多线程编程中的一个重要概念,通常线程一旦启动,就会独立...
线程死锁是指两个或多个线程在执行过程中因争夺资源而造成的一种互相等待的现象。若无外力作用,这些线程都将无法推进下去。为了避免死锁,开发者需要注意以下几点: - **最小化锁的持有时间**:尽可能减少锁的持有...
【Java打牌游戏与线程控制】\n\n在编程领域,尤其是游戏开发中,线程控制是一项重要的技术。Java打牌游戏是一个典型的实例,它展示了如何利用多线程技术来实现游戏流程的同步和异步操作。在这个游戏中,线程控制确保...
3. `pthread_cond_t` 和 `pthread_cond_wait()`: 条件变量是线程间同步的一种机制。`pthread_cond_t`定义了一个条件变量,而`pthread_cond_wait()`函数则让当前线程等待条件变量的满足。当其他线程改变了条件,可以...
在C#编程中,多线程技术是一种常用的方法,它能让我们在单个应用程序中同时执行多个任务,提高程序的效率和响应性。"等待窗体"是多线程应用中一个重要的概念,通常用于在后台任务执行时提供用户友好的界面反馈。本...
Enumerable扩展的线程控制是一种优化并发执行的方式,它基于AsyncEnumerator的概念,允许开发者更精细地管理和监控线程的运行状态。 AsyncEnumerator是一个异步枚举器,通常用于异步编程,它可以将一个枚举序列转化...
守护线程(Daemon Thread)是一种特殊的线程,当所有非守护线程结束时,守护线程也会自动结束。Java的垃圾回收线程就是典型的守护线程。 通过学习和实践上述知识点,初学者可以掌握多线程的基本操作,并能应用到...
在Java编程中,异步多线程是一种常见的优化性能的方式,尤其在处理高并发场景时。这种方式通过将任务分配到不同的线程上,使得多个任务可以并行执行,从而提高程序的运行效率。然而,如果不正确地管理和控制线程,...
- **任务超时和取消**:提供一种方式让提交的任务能够在一定时间内完成或被取消。 - **扩展性**:设计线程池时要考虑其可扩展性,以便在未来添加更多功能,如任务优先级队列、线程池的大小限制策略等。 总结来说,...
在.NET Framework中,线程池(ThreadPool)是资源池的一种具体应用,用于管理线程资源。它能够自动地根据应用程序的需求创建或销毁线程,从而避免频繁地创建和销毁线程所带来的开销。 #### 二、等待所有线程执行...
一种常见的方法是使用`System.Threading.Timeout`类,它可以与`WaitOne()`、`WaitAll()`和`WaitAny()`等方法结合使用,例如在`Mutex`、`Semaphore`和`EventWaitHandle`等同步原语中设置超时时间。例如: ```csharp ...
串口通信是计算机与外部设备之间的一种常见通信方式,尤其在工业控制领域中广泛使用。在本案例中,因为需要连接多个设备,例如水电站的PLC和调速器,所以涉及到多个串口的使用。每个串口都有其特定的通讯协议,包含...
10. **守护线程(Daemon)**:守护线程是一种特殊的线程,当所有非守护线程结束时,守护线程会自动结束。典型的守护线程如JVM的垃圾收集器。 11. **线程安全**:线程安全的类或方法可以在多线程环境中被正确使用,...