主要代码
定义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; //import org.springframework.beans.BeanUtils; 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<copyPropertiesData2> 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<copyPropertiesData2> 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<copyPropertiesData2> 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<Runnable> 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():
原文地址:https://www.cnblogs.com/blackjasmine/p/10264863.html
时间: 2024-10-05 03:19:10