佇列化泄洪- ExecutorService

2020-08-14 11:06:36

我們一塊想- -下,如果我們在開發一個網站 我們做秒殺活動,有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);

            }
        });