JAVA Callback效率测试

在最近的联网电商项目中,想要实现单个web容器内的支付请求,全部能够统一宏观上同步,实现粒度上面异步,找来找去,没有相关方面的框架或者方案,于是最后基于现实场景,打算使用Java callback 的多线程方式,假象伪并发量为100000

/**
 * 
 * @author gyx
 *
 */
public class A
{
private double  id = 0;
public A(double  id)
{
this.setId(id);
}
public double  getId() 
{
return id;
}
public void setId(double  id)
{
this.id = id;
}

/**
 * 线程类
 * @author gyx
 *
 */
public class MyCallable implements Callable<A>
{
    private A obj;
 
    /**
     * 线程类构造函数,传入线程序号
     * @param taskNum
     */
    public MyCallable(A obj)
    {
       this.setObj(obj);
    }
 
    /**
     * 重写接口的方法,子线程调用 <br/>
     * 此方法是生成0-99的数字,(百位表示子线程序号)用list返回
     */
    public A call() throws Exception
    {
    Date dateTmp1 = new Date();
    System.out.println("business_start.............and------begin" + this.getObj().getId());
        this.getObj().setId(Math.random() * 1000000000);
        Date dateTmp2 = new Date();
        long time = dateTmp2.getTime() - dateTmp1.getTime();
        System.out.println("线程" + Thread.currentThread().getId() + "任务时间【" + time + "毫秒】");
        return this.getObj();
    }

public A getObj() 
{
return obj;
}

public void setObj(A obj)
{
this.obj = obj;
}

/**
* @author gyx
*主线程调用
*/
public class Test
{
    public static void main(String[] args) throws InterruptedException, ExecutionException
    {
try
    {
     System.out.println("----程序开始运行----");
         Date date1 = new Date();
         int taskSize = 100000;
         // 创建一个线程池
//            ExecutorService pool = Executors.newFixedThreadPool(4);
         ExecutorService pool = Executors.newCachedThreadPool();
         // 创建多个有返回值的任务
         List<Future<A>> list = new ArrayList<Future<A>>();
         for (int i = 0; i < taskSize; i++)
         {
          System.out.println("the current  is ............" + i);
             Callable<com.athena.ckx.module.transTime.A> c = new MyCallable(new A(0));
             // 执行任务并获取Future对象
             Future<A> f = pool.submit(c); 
             System.out.println("get-result----------------------" + f.get().getId());
             list.add(f);
         }
         // 关闭线程池
         pool.shutdown();
         Date date2 = new Date();
         System.out.println("----程序结束运行----,程序运行时间【"   + (date2.getTime() - date1.getTime()) + "毫秒】");
         // 获取所有并发任务的运行结果
//          for (Future<A> f : list)
//          {
//              // 从Future对象上获取任务的返回值,并输出到控制台
//              System.out.println("get-result----------------------" + f.get().getId());
//          }
  }
    catch(Exception e)
    {
    e.printStackTrace();
    System.exit(0);
    }
finally
{
System.exit(0);
}
    }
}

结果为:----程序结束运行----,程序运行时间【26351毫秒】

调整线程池:

ExecutorService pool = Executors.newFixedThreadPool(2);

结果为:----程序结束运行----,程序运行时间【17128毫秒】

调整线程池:

ExecutorService pool = Executors.newFixedThreadPool(1);

结果为:程序运行时间【16269毫秒】

结论:newCachedThreadPool 效率最差,线程数小于cpuh核心 2/1 效率相对高,代价也比较平稳,处理当下假想,基本满足要求。

时间: 2024-12-15 21:45:50

JAVA Callback效率测试的相关文章

使用 Visual Studio Team Test 进行单元测试和java中的测试

原文:使用 Visual Studio Team Test 进行单元测试和java中的测试 C#中test测试地 方法一. 1.从NUnit官网(http://www.nunit.org/index.php)下载最新版本NUnit,当前版本为NUnit2.5.8. 2.安装后,在VS2008中新建测试项目StartNUnit 3.右击项目选择属性,在打开的窗口中选择调试.如图: 4.选择启动外部程序,并定位到NUnit的启动程序nunit.exe.如图: 5.在项目中添加NUnit引用,如图:

用for和while遍历HashMap效率测试

import java.util.Calendar; import java.util.HashMap; import java.util.Map; import java.util.Iterator; public class EntryTest { public static void main(String[] args) { Map<Integer, String> map = new HashMap<Integer, String>(); for (int i = 0;

ORM for Net主流框架汇总与效率测试

框架已经被越来越多的人所关注与使用了,今天我们就来研究一下net方面的几个主流ORM框架,以及它们的效率测试(可能会有遗漏欢迎大家讨论). ORM框架:Object/Relation Mapping(对象/关系 映射)的缩写,易于理解的模型化数据的方法.简单的说就是把数据库的关系型数据类型转换为用对象型程序控制的框架类型. 今天研究的orm框架如下: 1.NHibernate(使用与介绍:http://www.cnblogs.com/stone_w/archive/2011/09/15/2177

sql语句的效率测试

1.测试sql语句执行时间的方法,获得时间差 declare @end_date datetime select @begin_date = getdate() --要执行的sql语句 select @end_date = getdate() select datediff(ms,@begin_date,@end_date) as '用时/毫秒' 2.下面这种方法比较全面,将执行每个语句时采取的步骤作为行集返回,通过层次结构树的形式展示出来,输出中包含的列: SET STATISTICS io

关于pgsql 几个操作符的效率测试比较

关于pgsql 几个操作符的效率测试比较1. json::->> 和 ->> 测试方法:单次运行100次,运行10个单次取平均时间.测试结果:->> 效率高 5% 左右 功能差异:json::->> 在使用前需要对对象转换为jsonb 然后再执行 ->> 操作,所以比->>更耗时 .所以如果我们需要对返回的对象进行jsonb操作,用jsonb_* 相关函数时,建议用jsonb_* 而不用 jsonb_*_text ,后者会把结果的js

大数据量分页存储过程效率测试附代码

在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话. 测试环境 硬件:CPU 酷睿双核T5750  内存:2G 软件:Windows server 2003    +   Sql server 2005 OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable 按 Ctrl+C 复制代码1create database data_Test --创建数据库data_Test 2GO 3use data

java执行效率低,但效率就低吗?

很多没用过java或者没怎么用过java的程序员都会说java执行效率低,这种言论时不时的在影响着我这个初级的java开发者. java执行效率低因如下几点导致(和C++比较): 1,java不允许内存地址类型被修改,也不能像C++那样直接给内存地址加偏移量直接操作内存.C++处理内存地址办法确实直接了当,执行效率很高,但是也容易出现bug,java使用对象时,严格遵循类型转换规则. 2,C++在new对象之后有delete操作符来及时释放内存.java有垃圾回收机制,一段时间后会自动回收不再被

atitit groovy 总结java 提升效率

atitit groovy 总结java 提升效率 #---环境配置 1 #------安装麻烦的 2 三.创建groovy项目 2 3.  加入? Groovy 类 2 4.  编译执行groovy类 3 Groovy断点调试不生效的解决 4 Groovy实现执行原理 5 1. Groovy脚本的执行.. 5 2. Groovy类的执行.. 5 Groovy语法长处: 6 3. 动态类型def 6 4. 循环变量不须要def 6 5. String 和Gstring 6 6. 范围 6 7. 

java的junit测试

在实际的开发中不仅需要断点调试.语句输出的方法进行程序的调试,也需要单元测试.在java中的junit的测试方法一般是在要测试的方法上面添加@Test.@ Before.@After,@BeforeClass.@AfterClass等,不用写main方法,直接可以运行,而在android中的junit的测试一般是要单独写一个测试的类继承AndroidTestCase,在该类中写要测试的方法,最后直接运行就可以了. package cn.wwh.www.junits; import org.jun