前段時間面試,問了乙個簡單的問題,
當乙個服務需要呼叫多個外部服務時,呼叫鏈比較長,當是同步呼叫時,將會是多個服務響應時間的綜合。而我們使用非同步的方式,將會取決於最大響應時間的服務。
比如現在有4個服務,學生服務 1秒,教師服務2秒,班級服務3秒,宿舍服務4秒。我們採用同步呼叫的話,將花費10秒多。
假設 學生服務和班級服務相互依賴。所以組合起來非同步呼叫花費3秒。教師和宿舍服務組合花費4秒。那麼將花費7秒左右。
下面使用簡單的**來模擬下場景。
//任務類
public class task catch (interruptedexception e)
}public listteacherservice() catch (interruptedexception e)
}public listclassservice() catch (interruptedexception e)
}public listdormitoryservice() catch (interruptedexception e)
}}
//執行緒池工具類
public enum poolthreadutil
private list> invokecommands(list> callables) catch (interruptedexception e)
}public listexecute(list> callables)
} catch (interruptedexception e) catch (executionexception e)
return resultlist;
}public void shutdown()
}
//客戶端呼叫
public static void main(string args)
public static void sync()
public static void async() );
callables.add(() -> );
list.addall(poolthreadutil.instance.execute(callables));
callables.clear();
callables.add(() -> );
callables.add(() -> );
list.addall(poolthreadutil.instance.execute(callables));
long end = system.currenttimemillis();
system.out.println("async消耗時間——》" + string.valueof(end - start) + "ms");
}
非同步和同步輸出對比
async消耗時間——》7124
sync消耗時間——》10002
總結:從結果可以看出來,多執行緒的方式確實能提高響應速度,但由於執行緒的數量不是無限的,所以在設計線城市引數時要考慮業務請求以及佇列的大小,執行緒數太少的話,會造成佇列請求數過多,反而會導致響應速度更慢。所以執行緒池的引數要仔細斟酌。 黑馬程式設計師 執行緒 多執行緒
asp.net android io開發 net培訓 期待與您交流!執行緒概念 執行緒是程序中執行運算的最小單位,亦即執行處理機排程的基本單位。如果把程序理解為在邏輯上作業系統所完成的任務,那麼執行緒表示完成該任務的許多可能的子任務之一。引入執行緒的好處 1 易於排程。2 提高併發性。通過執行緒可方...
黑馬程式設計師 多執行緒
windows phone 7手機開發 net培訓 期待與您交流!一 程序與執行緒 l 程序 乙個執行的程式就是乙個程序,程序包括執行中的程式和程式需要用到的記憶體和系統資源 乙個程序至少有乙個執行緒,乙個程序中多個執行緒可以併發執行 l 執行緒 程式中的乙個執行流,每個執行緒都有自己的專有暫存器 ...
黑馬程式設計師 多執行緒
asp.net android io開發 net培訓 期待與您交流!執行緒與程序的關係 乙個程式就相當於乙個程序 乙個程序至少有乙個執行緒 同乙個程序中的多個執行緒之間可以 併發 執行 執行緒 1 乙個執行緒一次只能完成乙個任務 2 多執行緒方法重入 cpu是不斷的在多個執行緒之間來回切換執行的 3...