您的位置:首页 > 编程语言 > Java开发

java 多线程简单的工具类

2017-04-10 14:55 337 查看
一、效果



二、工具类代码

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
* 多线程工具类
*
* @author zhy
*
*/
public class ThreadUtil implements Runnable {
// 调用的class
private Class<?> className;

// 处理的方法名
private String methodName;

// 回调参数
private Object[] params;

// 日志对象
private static Log log = LogFactory.getLog(ThreadUtil.class);

/**
* 线程的构造方法
*
* @author zhy
* @param className 调用的类class
* @param methodName 回调的方法名
* @param params 回调传递的参数
*/
public ThreadUtil(Class<?> className, String methodName, Object... params) {
this.className = className;
this.methodName = methodName;
this.params = params;
}

@Override
public void run() {
Method method = null;
try {
// 获取参数长度
int paramsLen = params.length;

/* 获取方法参数类型 */
Class<?>[] paramsClass = new Class<?>[params.length];
for (int i = 0; i < paramsLen; i++) {
paramsClass[i] = params[i].getClass();
}

// 获取回调方法
method = className.getMethod(methodName, paramsClass);
// 调用回电方法
method.invoke(className.newInstance(), params);
} catch (NoSuchMethodException e) {
log.error("找不到该方法:" + e.getMessage(), e);
} catch (SecurityException e) {
log.error("安全出现异常:" + e.getMessage(), e);
} catch (IllegalAccessException e) {
log.error("非法进入异常:" + e.getMessage(), e);
} catch (IllegalArgumentException e) {
log.error("非法争议异常:" + e.getMessage(), e);
} catch (InvocationTargetException e) {
log.error("调用目标异常:" + e.getMessage(), e);
} catch (InstantiationException e) {
log.error("实例化异常:" + e.getMessage(), e);
}
}
}


三、测试类

import java.util.HashMap;
import java.util.Map;

public class ThreadTest {
public static void callBack(String message, HashMap<String, Object> message2) {
System.out.println(message);
System.out.println(message2);
}

public static void main(String[] args) {
Object[] str = new Object[2];
Map<String, Object> message2 = new HashMap<String, Object>();
message2.put("message", "回调测试2");

str[0] = "回调同步方法测试";
str[1] = message2;

ThreadUtil threadUtil = new ThreadUtil(ThreadTest.class, "callBack", str);
Thread thread = new Thread(threadUtil);
thread.start();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: