從乙個單執行緒的應用到乙個多執行緒的應用並不僅僅帶來好處,它也會有一些代價。不要僅僅為了使用多執行緒而使用多執行緒。而應該明確在使用多執行緒時,能多獲取的好處比所付出的代價大的時候,才使用多執行緒。如果存在疑問,應該嘗試測量一下應用程式的效能和響應能力,而不只是猜測。
雖然有一些多執行緒應用程式比單執行緒的應用程式要簡單,但其他的一般都更複雜。在多執行緒訪問共享資料的時候,這部分**需要特別的注意。執行緒之間的互動往往非常複雜。不正確的執行緒同步產生的錯誤非常難以被發現,並且重現以修復。
當cpu從執行乙個執行緒切換到執行另外乙個執行緒的時候,它需要先儲存當前執行緒的本地的資料,程式指標等,然後載入另乙個執行緒的本地資料,程式指標等,最後才開始執行。這種切換稱為「上下文切換」(「context switch」)。cpu會在乙個上下文中執行乙個執行緒,然後切換到另外乙個上下文中執行另外乙個執行緒。
上下文切換並不廉價。如果沒有必要,應該減少上下文切換的發生。
執行緒在執行的時候需要從計算機裡面得到一些資源。除了cpu,執行緒還需要一些記憶體來維持它本地的堆疊。它也需要占用作業系統中一些資源來管理執行緒。我們可以嘗試編寫乙個程式,讓它建立100個執行緒,這些執行緒什麼事情都不做,只是在等待,然後看看這個程式在執行的時候占用了多少記憶體。
多執行緒的代價
從乙個單執行緒的應用到乙個多執行緒的應用並不僅僅帶來好處,它也會有一些代價。不要僅僅為了使用多執行緒而使用多執行緒。而應該明確在使用多執行緒時能多來的好處比所付出的代價大的時候,才使用多執行緒。如果存在疑問,應該嘗試測量一下應用程式的效能和響應能力,而不只是猜測。雖然有一些多執行緒應用程式比單執行緒...
07 多執行緒03
1.中斷執行緒的執行 當乙個執行緒執行的時候,另乙個執行緒可以呼叫對應的thread的物件的 interrupt 方法來中斷它 public void interrupt 2.判斷執行緒是否中斷 public boolean isinterrupted 3.多執行緒資源協調問題 多執行緒同時去操作乙...
Java多執行緒03
生產者檢查倉庫是否已經滿了,如果沒滿,將生產產品 如果倉庫已滿,停止生產產品。消費者檢查倉庫是否已空,倉庫不空,消費者消費產品 若空,消費者停止消費產品。分析 這是乙個執行緒同步問題,生產者和消費者共享同乙個資源,並且生產者和消費者之間相互依賴,互為條件。對於生產者,沒有生產產品之前,要通知消費者等...