java 多线程简单的工具类

一、效果

java 多线程简单的工具类_第1张图片

二、工具类代码

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 message2) {
		System.out.println(message);
		System.out.println(message2);
	}
	
	public static void main(String[] args) {
		Object[] str = new Object[2];
		Map message2 = new HashMap();
		message2.put("message", "回调测试2");
		
		str[0] = "回调同步方法测试";
		str[1] = message2;
		
		ThreadUtil threadUtil = new ThreadUtil(ThreadTest.class, "callBack", str);
		Thread thread = new Thread(threadUtil);
		thread.start();
	}
}


你可能感兴趣的:(java)