监控函数的执行时间,若超时则强制返回一个默认值

这篇博客介绍了如何监控函数的执行时间,当超过预设时间时,函数会强制返回一个默认值,并使用`Thread.interrupt()`方法来尝试结束阻塞。示例中包含`Worker.java`, `WorkThread.java`和`MonitorThread.java`三个关键组件,通过反射实现通用性,追求效率的读者可以考虑去除反射部分。" 127694089,2254003,Flink CEP实战:构建智能监控与实时分析,"['flink', '大数据', '实时分析', '风控系统', '异常检测']
摘要由CSDN通过智能技术生成

     这里的函数强制返回是指在函数调用处结束阻塞,返回一个默认值, 同时调用执行函数线程的interrupt()方法,程序解除阻塞但不保证能能够结束函数的执行(参见API Thread的interrupt()方法)。为了更通用一点用了反射,如果对效率非常敏感,可自行修改去掉反射部分。

Worker.java:

/**
 * 监控函数执行时间,若超时强制返回
 * 
@author Liw
 * @time 2007-6
 
*/


public   class  Worker 
{
    
/**
     * 
@param methodName 函数名
     * 
@param defaultValue 默认值。若为基本类型则需转换为其包装类,如int类型的1需转换成new Integer(1)
     * 
@param timeout 超时时间
     * 
@param currentObj 要执行函数的对象
     * 
@param paramValues 参数值
     * 
@param primitiveTypeIndex 基本数据类型在参数列表中的索引,下表从0开始
     * 
@return 函数返回值
     
*/

    
public Object work(String methodName, Object defaultValue, long timeout, Object currentObj, Object[] paramValues, int[] primitiveTypeIndex)
    
{
        
if (paramValues == null{
            paramValues 
= new Object[]{};
        }

        
if (primitiveTypeIndex == null{
            primitiveTypeIndex 
= new int[]{};
        }

        
        MonitorThread monitor 
= new MonitorThread(defaultValue, timeout);
        WorkThread worker 
= new WorkThread(monitor, currentObj, methodName, paramValues, primitiveTypeIndex);
        
        worker.start();
        monitor.start();
        
        monitor.waitFor();
        
        
if (worker.isAlive()) {
            worker.interrupt();
        }

        
if (monitor.isAlive()) {
            monitor.interrupt();
        }

        
        
return monitor.getResult();
    }

}

 

WorkThread.java:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值