從單執行緒到多執行緒應用程式不僅僅提供好處,它也有一些代價。只是因為你可以,就把乙個應用程式變成多執行緒。你應該明了,這樣做所獲得的好處要大於成本。如果有疑問,請嘗試著量化一下應用程式的效能或響應速度,而不是只是猜測。
更複雜的設計
儘管多執行緒應用程式的某些部分比單執行緒應用程式更簡單,但其他部分更複雜。需要特別注意訪問共享資料的的被多個執行緒執行的**。執行緒的互動絕不是很簡單的事。由不正確的執行緒同步引起的錯誤可能非常難以檢測,重現和修復。
上下文切換開銷
當cpu從乙個執行緒的執行切換到另乙個執行緒的執行時,cpu需要儲存當前執行緒的本地資料,程式指標等,並且載入要執行的下乙個執行緒的本地資料,程式指標等。這個切換被稱為「上下文切換」。 cpu從在乙個執行緒的上下文中執行切換到在另乙個執行緒的上下文中執行。
增加資源消耗
執行緒需要一些來自計算機的資源才能執行。除了cpu時間,執行緒需要一些記憶體來保持其本地堆疊。它也可能占用作業系統內部需要管理執行緒的一些資源。你·可以嘗試建立乙個程式來建立100個執行緒,來看看應用程式執行時需要多少記憶體。
3 Java併發性和多執行緒 多執行緒的代價
以下內容 從乙個單執行緒的應用到乙個多執行緒的應用並不僅僅帶來好處,它也會有一些代價。不要僅僅為了使用多執行緒而使用多執行緒。而應該明確在使用多執行緒時能多來的好處比所付出的代價大的時候,才使用多執行緒。如果存在疑問,應該嘗試測量一下應用程式的效能和響應能力,而不只是猜測。設計更複雜 雖然有一些多執...
Java併發 多執行緒
執行緒狀態 每個執行緒可以看做不同的任務,cpu需要分配每個執行緒不同的使用時間,cpu需要不同的執行緒之間來回切換,造成執行緒可能存在的不同狀態。新建執行緒 public class thread1 extends thread public class runnable1 implements ...
多執行緒 Java多執行緒與併發
實現的方式主要有三種 執行緒的狀態 基本差別 最主要的本質區別 兩個概念 鎖池 假設執行緒a已經擁有了某個物件 不是類 的鎖,而其他執行緒b c想要呼叫這個物件的某個synchronized方法 或者塊 由於b c執行緒在進入物件的synchronized方法 或者塊 之前必須先獲得該物件鎖的擁有權...