java 监控方法执行的状态

血饮 2014-09-05 02:32:58
现在需要做个如下功能:
需求描述:前台页面发出一个请求给后台,后台接到请求会去执行N个方法(假设有10个方法)。与此同时,前台会每隔5秒,再次请求后台,查询目前正在执行哪个方法?并将正在执行的方法,提示个前台:某某某方法正在执行!该功能如何实现。注(项目是javase的,不是web项目。)
...全文
303 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
血饮 2014-09-05
  • 打赏
  • 举报
回复
引用 6 楼 PHIILL_01 的回复:
package com.synnex.just.test; public class SomeMethod { private String currentMethodName; public void m1(){ setCurrentMethodName("m1"); System.out.println("m1 executing ....."); } public void m2(){ setCurrentMethodName("m2"); System.out.println("m2 executing ....."); } public void m3(){ setCurrentMethodName("m3"); System.out.println("m3 executing ....."); } public void m4(){ setCurrentMethodName("m4"); System.out.println("m4 executing ....."); } public String getCurrentMethodName() { return currentMethodName; } public void setCurrentMethodName(String currentMethodName) { this.currentMethodName = currentMethodName; } } -------------------------------------------------------------------------------------------------------------------------------- package com.synnex.just.test; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class SomeThread extends Thread { private SomeMethod m ; public SomeThread(SomeMethod m){ this.m=m; } @Override public void run() { Class<?> classz=null; try { classz = Class.forName("com.synnex.just.test.SomeMethod"); } catch (ClassNotFoundException e) { e.printStackTrace(); } Method[] declaredMethods = classz.getDeclaredMethods(); while(true){ for(Method method : declaredMethods){ if(!method.getName().startsWith("m")){ continue; } try { Thread.currentThread().sleep(2000); method.invoke(m, null); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } } } ----------------------------------------------------------------------------------------------------------------------------- package com.synnex.just.test; public class Main { /** * @param args * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { SomeMethod m = new SomeMethod(); SomeThread t = new SomeThread(m); t.start(); while(true){ Thread.sleep(5000); System.out.println("Current method"+m.getCurrentMethodName()); } } } 不知道能不能满足楼主要求。
很给力
HinanaiTenshi 2014-09-05
  • 打赏
  • 举报
回复
javase项目还会有前台页面? 话说回来着就是个任务进度跟踪的功能啊,只要每个请求都有对应的唯一任务号就能做到。
0 1看天下 2014-09-05
  • 打赏
  • 举报
回复
方法调用与返回吗
  • 打赏
  • 举报
回复
package com.synnex.just.test; public class SomeMethod { private String currentMethodName; public void m1(){ setCurrentMethodName("m1"); System.out.println("m1 executing ....."); } public void m2(){ setCurrentMethodName("m2"); System.out.println("m2 executing ....."); } public void m3(){ setCurrentMethodName("m3"); System.out.println("m3 executing ....."); } public void m4(){ setCurrentMethodName("m4"); System.out.println("m4 executing ....."); } public String getCurrentMethodName() { return currentMethodName; } public void setCurrentMethodName(String currentMethodName) { this.currentMethodName = currentMethodName; } } -------------------------------------------------------------------------------------------------------------------------------- package com.synnex.just.test; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class SomeThread extends Thread { private SomeMethod m ; public SomeThread(SomeMethod m){ this.m=m; } @Override public void run() { Class<?> classz=null; try { classz = Class.forName("com.synnex.just.test.SomeMethod"); } catch (ClassNotFoundException e) { e.printStackTrace(); } Method[] declaredMethods = classz.getDeclaredMethods(); while(true){ for(Method method : declaredMethods){ if(!method.getName().startsWith("m")){ continue; } try { Thread.currentThread().sleep(2000); method.invoke(m, null); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } } } ----------------------------------------------------------------------------------------------------------------------------- package com.synnex.just.test; public class Main { /** * @param args * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { SomeMethod m = new SomeMethod(); SomeThread t = new SomeThread(m); t.start(); while(true){ Thread.sleep(5000); System.out.println("Current method"+m.getCurrentMethodName()); } } } 不知道能不能满足楼主要求。
huasuoworld 2014-09-05
  • 打赏
  • 举报
回复
请求响应一个线程中N个方法时,每隔5s,向前台推送当前执行哪个方法(未执行方法覆盖掉已执行方法名称存在一个变量中)。
rumlee 2014-09-05
  • 打赏
  • 举报
回复
后台利用线程执行,提供一个公共属性供其他线程查询不就行了。
昆卡卡 2014-09-05
  • 打赏
  • 举报
回复
随便说说,弄个公共变量,1-10分别代表你执行的那10个方法,进这10个方法的时候给这个变量赋上相应的值,请求后台的时候看这个变量的值就知道当前在哪个方法了
血饮 2014-09-05
  • 打赏
  • 举报
回复
引用 1 楼 jacktree365 的回复:
这个最好是做在数据库中,数据中有个触发器,你瞅瞅.
项目中没有数据库,是设备中的一个java插件!
朗晴 2014-09-05
  • 打赏
  • 举报
回复
这个最好是做在数据库中,数据中有个触发器,你瞅瞅.

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧