1. 程式人生 > 資訊 >如何從滴滴搶人,美團打車:新司機註冊 7 天免傭

如何從滴滴搶人,美團打車:新司機註冊 7 天免傭

一、corePoolSize 核心執行緒大小
執行緒池中最小的執行緒數量,即使處理空閒狀態,也不會被銷燬,除非設定了allowCoreThreadTimeOut。

CPU密集型:核心執行緒數 = CPU核數+ 1
IO密集型:核心執行緒數 = CPU核數 * 2+1
注:IO密集型(某大廠實踐經驗)
核心執行緒數 = CPU核數 / (1-阻塞係數)
例如阻塞係數 0.8,CPU核數為4,則核心執行緒數為20

二、maximumPoolSize 執行緒池最大執行緒數量
一個任務被提交後,首先會被快取到工作佇列中,等工作佇列滿了,則會建立一個新執行緒,處理從工作佇列中的取出一個任務。

三、keepAliveTime 空閒執行緒存活時間


當執行緒數量大於corePoolSize時,一個處於空閒狀態的執行緒,在指定的時間後會被銷燬。

四、unit 空間執行緒存活時間單位
keepAliveTime的計量單位

五、workQueue 工作佇列,jdk中提供了四種工作佇列
新任務被提交後,會先進入到此工作佇列中,任務排程時再從佇列中取出任務。
①ArrayBlockingQueue
基於陣列的有界阻塞佇列,按FIFO排序。
②LinkedBlockingQuene
基於連結串列的無界阻塞佇列(其實最大容量為Interger.MAX),按照FIFO排序。
④PriorityBlockingQueue
具有優先順序的無界阻塞佇列,優先順序通過引數Comparator實現。

六、threadFactory 執行緒工廠
建立一個新執行緒時使用的工廠,可以用來設定執行緒名、是否為daemon執行緒等等
七、handler 拒絕策略
當工作佇列中的任務已滿並且執行緒池中的執行緒數量也達到最大,這時如果有新任務提交進來,拒絕策略就是解決這個問題的,jdk中提供了4中拒絕策略:
①CallerRunsPolicy
該策略下,在呼叫者執行緒中直接執行被拒絕任務的run方法,除非執行緒池已經shutdown,則直接拋棄任務。
②AbortPolicy
該策略下,直接丟棄任務,並丟擲RejectedExecutionException異常。
③DiscardPolicy
該策略下,直接丟棄任務,什麼都不做。
④DiscardOldestPolicy
該策略下,拋棄最早進入佇列的那個任務,然後嘗試把這次拒絕的任務放入佇列。