我們一塊想- -下,如果我們在開發一個網站 我們做秒殺活動,有10個商品進行秒殺,每個1000件, 那麼我們要就要發50000個
令牌,這個數量很大。
佇列進行泄洪就是把存取的使用者分成批次,來減輕同時存取造成的壓力。
佇列化泄洪- ExecutorService
通過這個佇列。中每次獲取- 定數量的請求進行處理。處理的速度完全取決於 下遊的視窗的速度。
我們之前建立執行緒我們都是使用new Thread來建立執行緒。但這樣有一些問題。 。
a.每次new thread新建物件效能差。
b.執行緒缺乏統-管理,可能無限制新建執行緒
C .缺乏功能如定時功能定期執行執行緒中斷
d.重用存在的執行緒。減少物件建立
e.最有效的控制最大的併發數據。
//建立一個單執行緒執行緒池。他只會用唯- -的工作執行緒來工作。保證所有的任務 FIFO 執行。
ExecutorService executorService = Executors . newsingleThreadExecutor();
//建立個執行緒池
可以控制執行緒最大併發數。如果超出線 程會在佇列中等待。
ExecutorService executorservice = Executors . newFixedThreadPoo1() ;
//建立可以快取執行緒池,
可靈活回收空閒執行緒。沒 有回收則建立新執行緒
Executorservice executorService = Executors . newCachedThreadPoo1();
//建立一個執行緒池,定時以及週期性執行任務
ExecutorService executorService = Executors . newscheduledThreadPoo1() ;
ExecutorService executors = Executors.newFixedThreadPool(20);
Future<?> future = executors.submit(new Runnable() {
@Override
public void run() {
MiaoShaMessage miaoShaMessage = new MiaoShaMessage();
miaoShaMessage.setGoodsId(goodsId);
miaoShaMessage.setUser(user);
miaoShaMessage.setAddresssId(addresssId);
sendMessage.sendDirectMessage(miaoShaMessage);
}
});