[問題] 有的 Thread 會裝死

作者: dnzteeqrq (大隻貓)   2018-01-21 18:30:34
public A extends Thread{
public static void main(String args[]){
List<Thread> threadList = new ArrayList<Thread>();
for (int i = 1; i <= 10 ; i++) {
Thread t = new Thread(new A());
t.setPriority(Thread.MAX_PRIORITY);
threadList.add(t);
}
for(Thread t:threadList){
t.start();
}
}
@Override
public void run(){
for(int i=0;i<1000;i++){
// 使用 apache httpcomponents-client 套件
HttpClient client = HttpClientBuilder.create().build();
HttpGet request = new HttpGet(url);
HttpResponse response;
// 10 個 Thread 排隊發送 request
synchronized (A.class) {
response = client.execute(request);
}
.........
}//end for
}
}
目前遇到一個問題 , 一個 Thread 發送 1000 次 request ,
一次執行 10 個 Thread , 每次執行固定會有2個大幅落後其他8個
, 這 8 個 大概同時執行完畢 , 但另外 2 個可能只執行到 500 次
左右 , 謂何有 2 個 Thread 好像搶不到資源的樣子 , 照理說會照
排隊一個一個處理才是 ,應該不至於差這麼多 冏rz
後來有設定優先順序 , 10 個 Thread 都設最高 、 也有設定記憶體
-Xmx=2500m , 結果還是一樣 0rz
有沒有高手幫忙解答一下 >.<
作者: ssccg (23)   2018-01-21 20:58:00
照理說會排隊? 是照什麼理? synchronized不保證照順序有分到CPU的thread連搶很多次lock,而沒有分到CPU的thread過一段時間才能試一次是很可能發生的,你的CPU是8 thread?要保證排隊需要有個Queue去實作
作者: feeya (24 August 升格為鄉民)   2018-01-24 17:49:00
迴圈加個sleep是不是比較不會卡住
作者: Expsun (無限燃燒)   2018-01-27 01:56:00
thread starvation
作者: NullLife (廢材大叔有點累)   2018-02-06 14:37:00
喔喔喔 (筆記

Links booklink

Contact Us: admin [ a t ] ucptt.com