經典指數          
原因
519
瀏覽數
1
收藏數
 

在Android客戶端上,用java實現一個線程池(可以使用java的數據結構),需要滿足可以往前或者往后插入task,可配置最大同時執行的線程數,并對線程池中當前同一個類型的連續task進行合并執行(假設同一類型的task可以合并成一次執行)

     舉報   糾錯  
該題目由題來君提供于 2017-12-25 00:03
 
切換
2 個答案
在OkHttp的源碼里面,對請求任務的管理就滿足這道題目的要求了。使用了Deque 作為運行任務隊列和阻塞任務隊列的載體.
舉報   題來君 · 2018-01-01 23:05
 
切換

1. 可以往前或者往后插入task:使用LinkedBlockingQueue阻塞隊列,該阻塞隊列結構為雙向鏈表,滿足前后插入task

2. 配置最大同時執行的線程數:提供一對外設置的方法即可。

    工作過程(假設只有非核心線程):

            1. 加進來一個task,首先查看當前啟動的線程數是否已經到最大值,沒到的話新建一個線程開始執行task

            2. 線程已滿,則加入到阻塞隊列中等待執行

            3. 阻塞隊列如果也滿了,那么以爆出異常的形式通知外界調用者(java已有線程池策略)  

3. 對同一個類型的連續task進行合并執行:使用一個hashMap,key==task的某一唯一屬性,value==arrayList< task >集合。相同的task都會被放置在同一個key對應的value中(arrayList< task >),不同的task交給線程執行,同時將該task的唯一屬性值為key,新建arrayList集合放在hashmap中。等待執行完畢task,回過頭來清空該key對應的這條記錄即可。


舉報   15378412400 · 2018-03-14 10:22
 
切換
撰寫答案
掃描后移動端查看本題
广西快三结果控