监控一个方法的执行时间(不用抛出InterruptedException异常)
来源:互联网 发布:python matlab eval 编辑:程序博客网 时间:2024/05/15 10:50
在一个调用链上,往往有多个方法或者应用协同来处理,那么如果在一个方法上耗时比较长的话,往往会导致整体响应时间过长,或者导致系统错误,http调用还可以设置超时时间,如果一个方法处理某个东西时间过长了怎么办,网上找到很多监控方法,大多都是要抛一个可中断的异常才能行,下面介绍一个不用抛InterruptedException异常的方法。
直接上代码,很容易懂,就不啰嗦了。
package com.example.thread;import java.text.SimpleDateFormat;import java.util.Calendar;/** * Created by mazhenhua on 2017/3/2. */public class Test { private static SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); public static void main(String[] args) { int timeLimit = 5; // 预计TaskA执行不得超过5秒。 check(new TaskA("monitoThread"), timeLimit); } @SuppressWarnings("deprecation") public static void check(TaskA taskA, int timeLimit) { Thread subThread = new Thread(taskA); subThread.start(); // 启动子线程 long startTime = System.currentTimeMillis(); long endTime = System.currentTimeMillis(); boolean timeout = endTime - startTime > timeLimit * 1000; try { // 如果子线程未运行完毕,且未超时,则继续等待子线程。 while (subThread.isAlive() && !timeout) { subThread.join(1000); endTime = System.currentTimeMillis(); timeout = endTime - startTime > timeLimit * 1000; } } catch (InterruptedException e) { e.printStackTrace(); } if (timeout) { // 虽然该方法不推荐,但是对陷入死循环的线程也只能使用此方法来结束线程了。 subThread.stop(); String now = sdf.format(Calendar.getInstance().getTime()); System.out.println(now + " - " + taskA.name + " is timeout and is stopped."); } } public static class TaskA implements Runnable { private String name = ""; public TaskA(String name) { this.name = name; } public void run() { // 开始日志 String now = sdf.format(Calendar.getInstance().getTime()); System.out.println(now + " - " + name + " started."); // 模拟业务操作 doSomthing(); // 结束日志 now = sdf.format(Calendar.getInstance().getTime()); System.out.println(now + " - " + name + " ended."); } } public static void doSomthing(){ long begin = System.currentTimeMillis(); while (true) { /*System.out.println("死循环");*/ } }}
我这里是模拟了一个死循环,你也可以自己动手改下,直接return,就不会报超时的错了,会直接返回的。
0 0
- 监控一个方法的执行时间(不用抛出InterruptedException异常)
- 由于调用了interrupt方法,所以抛出了InterruptedException异常
- java 方法超过执行时间后抛出异常
- 抛出异常的方法
- java 方法的执行时间监控 设置超时(Future 接口)
- 一个异常抛出的例子
- 一个异常抛出的例子
- Java中为什么有的方法必须抛出异常,有的不用
- net 监控方法执行时间
- InterruptedException 异常
- Java正确处理InterruptedException的方法
- Java正确处理InterruptedException的方法
- Java正确处理InterruptedException的方法
- Java正确处理InterruptedException的方法
- Servlet技术(四)--Servlet的服务方法抛出异常
- 解释一个struts2抛出的异常
- 布署solr 时抛出的一个异常
- 一个简单的抛出异常总结
- Storm常用计算模式
- openresty 安装测试
- 使用JQUERY封装Form和input进行提交
- 实现大小字母转换
- PAT A1030
- 监控一个方法的执行时间(不用抛出InterruptedException异常)
- ActiveMQ安装部署(Windows)
- 自定义View(1)
- java数组定义方法
- php使用qrcode 生成带logo的二维码
- 【JavaEE】经典JAVA EE企业应用实战-读书笔记13
- hdu1010 Tempter of the Bone dfs搜索 剪枝
- linux命令之crontab定时执行任务
- DllImportAttribute.EntryPoint 字段