業務要求流程流轉與資料記錄(插表)非同步進行
使用執行緒池實現非同步呼叫:
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...