1、要对文本框进行实时监听。
2、用户每按下一次键盘就展示一次文本框中的内容的话。
3、用KeyListener监听器接口,在keyPressed方法的方法体里写下要输出的内容。
请求响应一个线程中N个方法时,每隔5s,向前台推送当前执行哪个方法(未执行方法覆盖掉已执行方法名称存在一个变量中)。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())
}
}
}
当有问题出现时,许多开发人员可能会比较盲目的用这些工具来试探性定位问题,而大多数情况下,这种试探会无功而返。因为这些分析工具主要是侧重Java单方面的分析,比如该系统调用第三方API,如果第三方API有问题,是无法监控到的。还有像文件、DB资源的访问也是是无法监控到的。除了JAVA自带的监控工具外,我们尝试了第三方的监控工具透视宝,功能相对全面,且易操作。
在功能方面,透视宝都包括:查看执行最慢的10个元素,包括元素执行次数、持续时长和占用时长百分比;查看HTTP请求参数,包括请求的响应状态、链接页面、具体的请求参数及返回结果;查看代码执行堆栈的详细树状信息,包括每个方法的计算时间、总耗时和被调用的次数,您能直接看到特殊标识的最慢方法;查看涉及SQL语句的总耗时排序,包括SQL执行总耗时、执行次数和具体的查询语句;第三方API调用。