『壹』 java多線程MasterWorker模式如何在高並發情況下優化
你說的Master指的是java的線程池吧,我之前做過一個項目,因為項目在內網拿不出來,我給你說一下我那次的經驗。
幾個關鍵點:
1、java線程池:使用java提供的ThreadPoolExecutor類構造主池,再構造一個輔池(輔池的作用在於當主池進入拒絕策略的時候,可以啟動輔池,幫助主池分擔一部分線程,或者在主池shutdown的瞬間又有任務進來,也會走到拒絕策略,此時可以啟動輔池處理這些線程,一般情況下輔池不會啟動),排隊策略使用LinkedBlockingQueue隊列。
2、單例模式:利用spring的IOC容器的單例性,每次取線程池時,從IOC容器中注入。創建一個組件類BatPool(spring組件默認為單例),裡面再使用單例模式創建線程池,單例中的單例,保證單例性:
@Component
classBatPool{
privateThreadPoolExecutor mainPool;
ThreadPoolExecutor create(){
if(mainPool== null){
retrun new ThreadPoolExecutor();
}else{
retrunmainPool;
}
...
}
業務中:
@Autowired
BatPool batPool;
ThreadPoolExecutor pool =batPool.create();
...
線程池的配置你自己參考網上吧
這樣在業務中,每次取到的池都是同一個池,不會多次創建。
如果你沒有使用spring的話,我再想想辦法怎麼實現全局的單例模式