程式設計師的日常 多執行緒一

2021-09-26 08:33:28 字數 1623 閱讀 1472

前段時間面試,問了乙個簡單的問題,

當乙個服務需要呼叫多個外部服務時,呼叫鏈比較長,當是同步呼叫時,將會是多個服務響應時間的綜合。而我們使用非同步的方式,將會取決於最大響應時間的服務。

比如現在有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...