由于一些特殊需要,对执行流加上超时控制.以自己的水平想了下面的方法.也许有更好的通用方法,只是我不知道.呵,写出来,供有需要的人参考.

TimeoutThread.java


java监控函数执行时间_i++

java监控函数执行时间_i++_02public class TimeoutThread{

java监控函数执行时间_i++_03 long milliseconds;

java监控函数执行时间_java_04 private void notifyObj(){

java监控函数执行时间_java_04 synchronized(this){

java监控函数执行时间_i++_03 notify();

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_03

java监控函数执行时间_java_04 public TimeoutThread(long milliseconds){

java监控函数执行时间_i++_03 this.milliseconds = milliseconds;

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_03

java监控函数执行时间_java_04 public void mydo(){

java监控函数执行时间_i++_03

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_03

java监控函数执行时间_i++_03 Thread runthread = null;

java监控函数执行时间_java_04 private void myrun(){

java监控函数执行时间_i++_03

java监控函数执行时间_java_04 class MyThread extends Thread{

java监控函数执行时间_java_04 public void run(){

java监控函数执行时间_java_04 try{

java监控函数执行时间_i++_03 //监控程序执行时间不得超过

java监控函数执行时间_i++_03 Thread.sleep(milliseconds);

java监控函数执行时间_java_04 }catch(Exception exp){

java监控函数执行时间_i++_03 //exp.printStackTrace();

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_03 //如果程序超出时间,停止原线程

java监控函数执行时间_i++_03 runthread.interrupt();

java监控函数执行时间_i++_03

java监控函数执行时间_i++_03 //防止InterruptedException被捕获而杀不了,尝试20次

java监控函数执行时间_i++_03 int i=0;

java监控函数执行时间_java_04 while(runthread.isAlive()){

java监控函数执行时间_java_04 try{

java监控函数执行时间_i++_03 Thread.sleep(50);

java监控函数执行时间_java_04 }catch(Exception exp){}

java监控函数执行时间_i++_03 runthread.interrupt();

java监控函数执行时间_i++_03 i++;

java监控函数执行时间_java_04 if(i>20){

java监控函数执行时间_i++_03 break;

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_03 System.out.println(i);

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_03

java监控函数执行时间_i++_03 notifyObj();

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_03 //将被监视线程指定为当前线程

java监控函数执行时间_i++_03 runthread = Thread.currentThread();

java监控函数执行时间_i++_03 //创建监控线程,设为非阻塞线程

java监控函数执行时间_i++_03 MyThread timeOutThread = new MyThread();

java监控函数执行时间_i++_03 timeOutThread.setDaemon(true);

java监控函数执行时间_i++_03 timeOutThread.start();

java监控函数执行时间_i++_03 mydo();

java监控函数执行时间_i++_03 timeOutThread.interrupt();

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_03

java监控函数执行时间_java_04 public void run(){

java监控函数执行时间_java_04 try{

java监控函数执行时间_java_04 new Thread(){

java监控函数执行时间_java_04 public void run(){

java监控函数执行时间_java_04 try{

java监控函数执行时间_i++_03 myrun();

java监控函数执行时间_i++_03 notifyObj();

java监控函数执行时间_java_04 }catch(Exception exp){

java监控函数执行时间_i++_03 notifyObj();

java监控函数执行时间_i++_03 exp.printStackTrace();

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_07 }.start();

java监控函数执行时间_java_04 synchronized(this){

java监控函数执行时间_i++_03 wait();

java监控函数执行时间_i++_07 }

java监控函数执行时间_java_04 }catch(Exception ex){

java监控函数执行时间_i++_03 ex.printStackTrace();

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_07 }

java监控函数执行时间_执行时间_79}

java监控函数执行时间_i++


TT.java


java监控函数执行时间_i++

java监控函数执行时间_i++_02public class TT {

java监控函数执行时间_i++_03

java监控函数执行时间_java_04 public static String getName(long ms){

java监控函数执行时间_i++_03 final StringBuffer sb = new StringBuffer();

java监控函数执行时间_java_04 new TimeoutThread(ms){

java监控函数执行时间_java_04 public void mydo(){

java监控函数执行时间_java_04 try{

java监控函数执行时间_i++_03 Thread.sleep(2000);

java监控函数执行时间_i++_03 sb.append("hello world");

java监控函数执行时间_java_04 }catch(Exception exp){

java监控函数执行时间_i++_03

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_07 }.run();

java监控函数执行时间_i++_03 return sb.toString();

java监控函数执行时间_i++_07 }

java监控函数执行时间_java_04 /**

java监控函数执行时间_i++_03 * @param args

java监控函数执行时间_i++_07 */

java监控函数执行时间_java_04 public static void main(String[] args) {

java监控函数执行时间_i++_03 // TODO Auto-generated method stub

java监控函数执行时间_i++_03 System.out.println("begin 5000 method");

java监控函数执行时间_java_04 new TimeoutThread(5000){

java监控函数执行时间_java_04 public void mydo(){

java监控函数执行时间_i++_03 //该函数不能将InterruptedException捕获而不抛出,否则,无法起到监控效果

java监控函数执行时间_i++_03 //java.lang.InterruptedException

java监控函数执行时间_i++_03 //此函数显示了不能正确被关闭

java监控函数执行时间_java_04 for(int i=0;i<20;i++){

java监控函数执行时间_java_04 try{

java监控函数执行时间_i++_03 Thread.sleep(1000);

java监控函数执行时间_java_04 }catch(Exception exp){

java监控函数执行时间_i++_03 //exp.printStackTrace();

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_03 System.out.println("step:"+i);

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_03 System.out.println("eeeee:");

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_07 }.run();

java监控函数执行时间_i++_03

java监控函数执行时间_i++_03 System.out.println("end method");

java监控函数执行时间_i++_03

java监控函数执行时间_i++_03 System.out.println("begin 5000 method");

java监控函数执行时间_java_04 new TimeoutThread(5000){

java监控函数执行时间_java_04 public void mydo(){

java监控函数执行时间_i++_03 //该函数不能将InterruptedException捕获,否则,无法起到监控效果

java监控函数执行时间_i++_03 //java.lang.InterruptedException

java监控函数执行时间_java_04 try{

java监控函数执行时间_java_04 for(int i=0;i<10;i++){

java监控函数执行时间_i++_03 Thread.sleep(1000);

java监控函数执行时间_i++_03 System.out.println("step:"+i);

java监控函数执行时间_i++_07 }

java监控函数执行时间_java_04 }catch(Exception exp){

java监控函数执行时间_i++_03 //exp.printStackTrace();

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_07 }.run();

java监控函数执行时间_i++_03

java监控函数执行时间_i++_03 System.out.println("end method");

java监控函数执行时间_i++_03

java监控函数执行时间_i++_03 System.out.println("get name is:"+getName(1000));

java监控函数执行时间_i++_03 System.out.println("get name is:"+getName(5000));

java监控函数执行时间_i++_03

java监控函数执行时间_i++_07 }

java监控函数执行时间_i++_03

java监控函数执行时间_执行时间_79}

java监控函数执行时间_i++