java监控函数执行时间
http://blog.csdn.net/ycg01/article/details/1467542

版权声明:本文为博主原创文章,未经博主允许不得转载。
由于一些特殊需要,对执行流加上超时控制.以自己的水平想了下面的方法.也许有更好的通用方法,只是我不知道.呵,写出来,供有需要的人参考.
TimeoutThread.java

public class TimeoutThread{
long milliseconds;
private void notifyObj(){
synchronized(this){
notify();
}
}
public TimeoutThread(long milliseconds){
this.milliseconds = milliseconds;
}
public void mydo(){
}
Thread runthread = null;
private void myrun(){
class MyThread extends Thread{
public void run(){
try{
//监控程序执行时间不得超过
Thread.sleep(milliseconds);
}catch(Exception exp){
//exp.printStackTrace();
}
//如果程序超出时间,停止原线程
runthread.interrupt();
//防止InterruptedException被捕获而杀不了,尝试20次
int i=0;
while(runthread.isAlive()){
try{
Thread.sleep(50);
}catch(Exception exp){}
runthread.interrupt();
i++;
if(i>20){
break;
}
System.out.println(i);
}
notifyObj();
}
}
//将被监视线程指定为当前线程
runthread = Thread.currentThread();
//创建监控线程,设为非阻塞线程
MyThread timeOutThread = new MyThread();
timeOutThread.setDaemon(true);
timeOutThread.start();
mydo();
timeOutThread.interrupt();
}
public void run(){
try{
new Thread(){
public void run(){
try{
myrun();
notifyObj();
}catch(Exception exp){
notifyObj();
exp.printStackTrace();
}
}
}.start();
synchronized(this){
wait();
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
TT.java

public class TT {
public static String getName(long ms){
final StringBuffer sb = new StringBuffer();
new TimeoutThread(ms){
public void mydo(){
try{
Thread.sleep(2000);
sb.append("hello world");
}catch(Exception exp){
}
}
}.run();
return sb.toString();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("begin 5000 method");
new TimeoutThread(5000){
public void mydo(){
//该函数不能将InterruptedException捕获而不抛出,否则,无法起到监控效果
//java.lang.InterruptedException
//此函数显示了不能正确被关闭
for(int i=0;i<20;i++){
try{
Thread.sleep(1000);
}catch(Exception exp){
//exp.printStackTrace();
}
System.out.println("step:"+i);
}
System.out.println("eeeee:");
}
}.run();
System.out.println("end method");
System.out.println("begin 5000 method");
new TimeoutThread(5000){
public void mydo(){
//该函数不能将InterruptedException捕获,否则,无法起到监控效果
//java.lang.InterruptedException
try{
for(int i=0;i<10;i++){
Thread.sleep(1000);
System.out.println("step:"+i);
}
}catch(Exception exp){
//exp.printStackTrace();
}
}
}.run();
System.out.println("end method");
System.out.println("get name is:"+getName(1000));
System.out.println("get name is:"+getName(5000));
}
}
java监控函数执行时间的更多相关文章
- Java 回调函数
下面使用java回调函数来实现一个测试函数运行时间的工具类: 如果我们要测试一个类的方法的执行时间,通常我们会这样做: public class TestObject { /** * 一个用来被测试的 ...
- Java回调函数的理解与实现
回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 在Java里面,我们使用接口来实现回调.举个例子 所谓的回调,就是程序员 ...
- hive 调用java的函数和科学记数法转换
hive中field如果是string,比如id,那么使用10000000000+id结果是科学计数法显示,转换为正常显示方法: select (10000000000+cast(id as int) ...
- [Java]_函数传参的疑惑与思考
问题来源于leetcode上的两道题 Path Sum I && II,分别写了两个dfs. void dfs(TreeNode node , int sum , ArrayList& ...
- Java的函数与函数重载
关于Java的函数与函数重载 关于Java的函数与函数重载 1. 函数 假设有一个游戏程序,程序在运行过程中,要不断地发射炮弹.发射炮弹的动作都需要使用一段百行左右的程序代码,在每次发射炮弹的地方都要 ...
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
文章摘要: 本文主要实现两个功能: (1)通过Android sdk的API得到应用程序的包名(PackageName),然后传递给c++层函数. (2)通过c++函数调用Android的java层函 ...
- java 一个函数EnumMap返回多个值
java 一个函数如何返回多个值 在开发过程中,经常会有这种情况,就是一个函数需要返回多个值,这是一个问题!! 网上这个问题的解决方法: 1.使用map返回值:这个方法问题是,你并不知道如何返回值 ...
- JAVA – 虚函数、抽象函数、抽象类、接口
本文转载地址:http://blog.csdn.net/trojanpizza/article/details/6556604 1. Java虚函数 虚函数的存在是为了多态. C++中普通成员函数加 ...
- MinerMonitorThread.java 监控线程
MinerMonitorThread.java 监控线程 package com.iteye.injavawetrust.miner; import org.apache.commons.loggin ...
随机推荐
- 201312月CCF-2,ISBN号码分析
明天要考CCF啦,偶还是很紧张的.最近看了数据结构,今天才开始上机练习,对,我就是这么懒..废话不多说,我写这篇文章主要是分析CCF编程的小窍门,因为在网上没找到,所以我决定自力更生丰衣足食.!!!! ...
- CentOS 7 多网卡绑定
根据官方文档Red_Hat_Enterprise_Linux-7-Networking_Guide-en-US用nmcli做起来还是相当容易的.下面把俺的步骤贴下. 1.查看目前网卡的名称和状态.#n ...
- 在CentOS linux上通过yum安装JDK<转>
卸载centos自带的jdk 1.查看当前的jdk版本,并卸载 [root@localhost opt]# rpm -qa|grep java java-1.6.0-openjdk-1.6.0.3 ...
- DirectShow音频采集声音不连续问题分析与解决办法经验总结
最近广州大雨不断,并且多数无前兆,突然就来场大雨,给同学们降降温,说来本也是好事,但有时候下的真不是时候,最近这段时间都是即将下班了,大雨就来了,昨晚快下班前又出现了大雨,北方人总爱忘带雨伞,这不就被 ...
- C Runtime Library来历, API, MFC, ATL关系
首先说明,我google了半天,想找到英文的关于这个资料,但是实在找不到,只好转载国人的讨论. CRT原先是指Microsoft开发的C Runtime Library,用于操作系统的开发及运行.后来 ...
- SQL多表连接查询以及mysql数据库、sqlserver数据库常见不同点
mysql数据库表及数据准备语句: USE test; DROP TABLE IF EXISTS `teacher_table`; DROP TABLE IF EXISTS `student_tabl ...
- Codeforces Round #375 (Div. 2)A. The New Year: Mee
A. The New Year: Meeting Friends time limit per test 1 second memory limit per test 256 megabytes in ...
- redhat 安装hadoop1.2.1伪分布式
完整安装过程参考:http://www.cnblogs.com/shishanyuan/p/4147580.html 一.环境准备 1.安装linux.jdk 2.下载hadoop2. ...
- ReactiveCocoa总结
RAC三部曲,1创建信号,2订阅信号,3发送信号, 信号类: RACSiganl // 1.创建信号 RACSignal *siganl = [RACSignal createSignal:^R ...
- 记一次Jquery获取值的典型错误
直接上代码: 代码很简单,通过Post的形式提交参数,但是发现提交的data总是空,昨晚有点纳闷,今天一看才发现... 获取值得时候的顺序有问题,获取值应该是在onclick事件中. 综上:写Jque ...