[问题] 有的 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