java 多线程简单的工具类
2017-05-09 18:06
176 查看
一、效果
二、工具类代码
[java] view
plain copy
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);
}
}
}
三、测试类
[java] view
plain copy
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();
}
}
二、工具类代码
[java] view
plain copy
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);
}
}
}
三、测试类
[java] view
plain copy
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();
}
}
相关文章推荐
- java 多线程简单的工具类
- 简单直观-实战体会Java多线程编程的精要 (3)
- 简单直观-实战体会Java多线程编程的精要 (5)
- java工具类简单介绍
- Java IO简单的工具类
- Java多线程简单示例
- 简单直观-实战体会Java多线程编程的精要 (1)
- socket ( java ) 简单多个客户端、服务端通信(多线程)
- java 并发包 多线程 工具类 笔记
- Java实例开发05-01 简单的多线程服务器
- java中线程的简单的线程的多线程的一个区别
- 简单直观-实战体会Java多线程编程的精要
- Java多线程-一个简单的线程,实现挂起和恢复的功能
- 简单的Java多线程演示
- Java简单多线程断点下载
- 简单直观-实战体会Java多线程编程的精要 (4)
- Java: 简单模拟多线程访问同样变量导致的问题
- Java多线程运行时,尽可能调用单例对象、工具类和静态方法,这样可以减少内存的占用量
- 记事本运行java文件实现简单的多线程
- Java多线程编程--(10)学习Java5.0 并发编程包--线程工具类