日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java callback 多线程_JAVA Callback效率测试

發布時間:2025/3/12 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java callback 多线程_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

{

private A obj;

/**

* 線程類構造函數,傳入線程序號

* @param taskNum

*/

public MyCallable(A obj)

{

this.setObj(obj);

}

/**

* 重寫接口的方法,子線程調用

* 此方法是生成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> list = new ArrayList>();

for (int i = 0; i < taskSize; i++)

{

System.out.println("the current ?is ............" + i);

Callable c = new MyCallable(new A(0));

// 執行任務并獲取Future對象

Future 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 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 效率相對高,代價也比較平穩,處理當下假想,基本滿足要求。

總結

以上是生活随笔為你收集整理的java callback 多线程_JAVA Callback效率测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。