主要代码
定义2个bean对象:
public class copyPropertiesData1 {
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
public class copyPropertiesData2 {
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
分别使用BeanUtils、PropertyUtils、BeanCopier转化1000个对象:
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;
import net.sf.cglib.beans.BeanCopier;
public class copyPropertiesCompare {
final static List<copyPropertiesData1> entityList;
static{
entityList = new ArrayList();
for (int i = 0; i < 10; i++) {
copyPropertiesData1 entity = new copyPropertiesData1();
entityList.add(entity);
}
}
//使用BeanUtils转化1000个对象
public void test_convert_entity_to_model_performance_use_beanutils() throws IllegalAccessException, InvocationTargetException{
long start = System.currentTimeMillis();
List modelList = new ArrayList<>();
for (copyPropertiesData1 src : entityList) {
copyPropertiesData2 dest = new copyPropertiesData2();
BeanUtils.copyProperties(src, dest);
modelList.add(dest);
}
System.out.printf("BeanUtils took time: %d(ms)%n",System.currentTimeMillis() - start);
}
//使用PropertyUtils转化1000个对象
public void test_convert_entity_to_model_performance_use_PropertyUtils() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException{
long start = System.currentTimeMillis();
List modelList = new ArrayList<>();
for (copyPropertiesData1 src : entityList) {
copyPropertiesData2 dest = new copyPropertiesData2();
PropertyUtils.copyProperties(src, dest);
modelList.add(dest);
}
System.out.printf("PropertyUtils took time: %d(ms)%n",System.currentTimeMillis() - start);
}
//使用BeanCopier转化1000个对象
public void test_convert_entity_to_model_performance_use_beancopier(){
long start = System.currentTimeMillis();
BeanCopier b = BeanCopier.create(copyPropertiesData1.class, copyPropertiesData2.class, false);
List modelList = new ArrayList<>();
for (copyPropertiesData1 src : entityList) {
copyPropertiesData2 dest = new copyPropertiesData2();
b.copy(src, dest, null);
modelList.add(dest);
}
System.out.printf("BeanCopier took time: %d(ms)%n",System.currentTimeMillis() - start);
}
public static void main(String[] args) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException{
copyPropertiesCompare test = new copyPropertiesCompare();
test.test_convert_entity_to_model_performance_use_beanutils();
// test.test_convert_entity_to_model_performance_use_PropertyUtils();
// test.test_convert_entity_to_model_performance_use_beancopier();
}
}
多线程调用:
import java.lang.reflect.InvocationTargetException;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class ThreadPoolExecuteTest {
public static void main(String[] args){
BlockingQueue workQueue = new ArrayBlockingQueue<>(10, true);
ExecutorService executorService = new ThreadPoolExecutor(10, 10, 1, TimeUnit.MINUTES, workQueue, new ThreadPoolExecutor.CallerRunsPolicy());
for(int i=1;i<9999999;i++){
executorService.execute(new ExecuteTtest());
}
executorService.shutdown();
}
static class ExecuteTtest implements Runnable {
private ExecuteTtest() {
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
System.out.println(Thread.currentThread().getName() + " thread start to work");
copyPropertiesCompare test = new copyPropertiesCompare();
// test.test_convert_entity_to_model_performance_use_beancopier();
// test.test_convert_entity_to_model_performance_use_beanutils();
test.test_convert_entity_to_model_performance_use_PropertyUtils();
} catch (Exception e) {
e.printStackTrace();
} }}}
结果
单笔调用耗时如下:
BeanUtils took time: 110(ms)
PropertyUtils took time: 5(ms)
BeanCopier took time: 75(ms)
并发调用消耗cpu情况
BeanUtils.copyProperties():
PropertyUtils.copyProperties():
cglib beans.BeanCopier():
网友评论