Executors的工廠方法提供的5種不同的執行緒池
作用:該方法返回一個固定執行緒數量的執行緒池,該執行緒池中的執行緒數量始終不變,即不會再建立新的執行緒,也不會銷燬已經建立好的執行緒,自始自終都是那幾個固定的執行緒在工作,所以該執行緒池可以控制執行緒的最大併發數。
栗子:假如有一個新任務提交時,執行緒池中如果有空閒的執行緒則立即使用空閒執行緒來處理任務,如果沒有,則會把這個新任務存在一個任務佇列中,一旦有執行緒空閒了,則按FIFO方式處理任務佇列中的任務。
2、newCachedThreadPool() :
作用:該方法返回一個可以根據實際情況調整執行緒池中執行緒的數量的執行緒池。即該執行緒池中的執行緒數量不確定,是根據實際情況動態調整的。
栗子:假如該執行緒池中的所有執行緒都正在工作,而此時有新任務提交,那麼將會建立新的執行緒去處理該任務,而此時假如之前有一些執行緒完成了任務,現在又有新任務提交,那麼將不會建立新執行緒去處理,而是複用空閒的執行緒去處理新任務。那麼此時有人有疑問了,那這樣來說該執行緒池的執行緒豈不是會越集越多?其實並不會,因為執行緒池中的執行緒都有一個“保持活動時間”的引數,通過配置它,如果執行緒池中的空閒執行緒的空閒時間超過該“儲存活動時間”則立刻停止該執行緒,而該執行緒池預設的“保持活動時間”為60s。
3、newSingleThreadExecutor() :
作用:該方法返回一個只有一個執行緒的執行緒池,即每次只能執行一個執行緒任務,多餘的任務會儲存到一個任務佇列中,等待這一個執行緒空閒,當這個執行緒空閒了再按FIFO方式順序執行任務佇列中的任務。
4、newScheduledThreadPool() :
作用:該方法返回一個可以控制執行緒池內執行緒定時或週期性執行某任務的執行緒池。
5、newSingleThreadScheduledExecutor() :
作用:該方法返回一個可以控制執行緒池內執行緒定時或週期性執行某任務的執行緒池。只不過和上面的區別是該執行緒池大小為1,而上面的可以指定執行緒池的大小。