java 非同步呼叫

2021-07-09 20:27:11 字數 1485 閱讀 4845

業務要求流程流轉與資料記錄(插表)非同步進行

使用執行緒池實現非同步呼叫:

1.執行緒池配置

name="esg.taskexecutor"

class ="org.springframework.scheduling.concurrent.threadpooltaskexecutor" >

name = "corepoolsize" value ="5" />

name = "keepaliveseconds" value ="600" /> ---空閒執行緒的存活時間.

name = "maxpoolsize" value ="10" />

name = "queuecapacity" value ="25" />

`a.corepool size:設定threadpool可接受的主要thread數量

因此若activethread未超過corepool size,則threadpool會繼續new thread

b.queuecapacity:設定當request超過corepool size時,可以先暫存的數量

因此若request已經超過corepool size,則threadpool不會再new thread,會先將request放置於arrayblockingqueue

若此設定不為正整數,則threadpool會採用沒有限制的linkedblockingqueue,同時會忽略maxpool size的設定,也就是說thread會無限制產生下去

c.maxpool size:設定當queue滿的時候,最大thread的數量

因此若request超過corepool size,會先放入queue中儲存,若連queue都滿了,這時候threadpool會再new thread,直到等於maxpool size

當request量牴觸到maxpool size時,threadpool會將後續request丟掉,可以實作rejectedexecutionhandler來承接這些被丟掉的request,後續再看看是要記錄到資料庫或進行其他處置

參閱:2.

@resource(name = "esg.taskexecutor")

private taskexecutor taskexecutor = null;

@transactional(rollbackfor = exception.class)

@override

public

void

startinstanceasync(final input input, final output output)

catch (runtimeexception e)

logger.trace(this.getclass(), "startinstanceasync", "啟動例項化處理完成,執行緒結束");

}});

}

java非同步呼叫理解

下面來看看蛋糕師傅是怎麼做蛋糕的 建立乙個字串,包含count個c字元,為了表現出犯法需要花費一些時間,使用了sleep。public class realdata implements data catch interruptedexception e system.out.println rea...

同步呼叫與非同步呼叫

一 什麼是同步呼叫與非同步呼叫 定義 1 同步就是整個處理過程順序執行,當各個過程都執行完畢,並返回結果。2 非同步呼叫則是只是傳送了呼叫的指令,呼叫者無需等待被呼叫的方法完全執行完畢 而是繼續執行下面的流程。例如,在某個呼叫中,需要順序呼叫 a,b,c三個過程方法 如他們都是同步呼叫,則需要將他們...

JAVA多執行緒實現非同步呼叫

時間 只需要領個提貨單就可以了 去幹別的事情 等到蛋糕做好了,再拿提貨單取蛋糕就可以了。package com.somnus async description 顧客 date 2016年3月9日 下午7 20 41 version 1.0 public class customer catch i...