master-worker是常用的平行計算模式。它的核心思想是系統由兩類程序協作工作:master程序和worker程序。
master負責接收和分配任務,worker負責處理子任務。當各個worker子程序處理完成後,會將結果返回給master,由master作歸納總結。
其好處就是能將乙個大任務分解成若干個小任務,並行執行,從而提高系統的吞吐量。
處理過程如下圖所示:
master程序為主要程序,它維護乙個worker程序佇列、子任務佇列和子結果集。worker程序佇列中的worker程序不停從任務佇列中提取要處理的子任務,並將結果寫入結果集。
根據上面的思想,我們來模擬一下這種經典設計模式的實現。
既然worker是具體的執行任務,那麼worker一定要實現runnable介面
matser作為接受和分配任務,得先有個容器來裝載使用者發出的請求,在不考慮阻塞的情況下我們選擇concurrentlinkedqueue作為裝載容器
worker物件需要能從master接收任務,它也得有master concurrentlinkedqueue容器的引用
master還得有個容器需要能夠裝載所有的worker,可以使用hashmap
worker處理完後需要將資料返回給master,那麼master需要有個容器能夠裝載所有worker併發處理任務的結果集。此容器需要能夠支援高併發,所以最好採用concurrenthashmap
同理由於worker處理完成後將資料填充進master的concurrenthashmap,那麼它也得有乙份concurrenthashmap的引用
public class task
public void setid(int id)
public string getname()
public void setname(string name)
public int getprice()
public void setprice(int price)
}
public
class
master
}//用於提交任務
public
void
submit
(task task)
//執行方法,啟動應用程式讓所有的worker工作
public
void
execute()
}//判斷所有的執行緒是否都完成任務
public
boolean
iscomplete()
}return
true;}
//總結歸納
public
intgetresult()
return ret;
}}
public
class
worker
implements
runnable
public
void
setresultmap
(concurrenthashmap
resultmap)
@override
public
void
run()}
//核心處理邏輯,可以抽離出來由具體子類實現
private object handle
(task executetask)
catch
(interruptedexception e)
return result;
}}
public
class
main
master.
execute()
;long start = system.
currenttimemillis()
;while
(true)}
}}
在worker物件中的核心處理業務邏輯handle()方法最好抽象成公共方法,具體實現由子類覆寫。 多執行緒設計模式
呼叫類 public class main 介面 public inte ce data 包裝類 public class futureclient start return futuredata 真實資料處理類 public class realdata implements data catch...
多執行緒設計模式
所謂 single threaded execution 即 以乙個執行緒執行 該模式用於設定限制,以確保同一時間內只讓乙個執行緒執行處理。immutable模式中存在著確保例項狀態不發生改變的類 immutable類 在訪問這些例項時並不需要執行耗時的互斥處理,因此若能巧妙利用該模式,定能提高程式...
多執行緒 多執行緒 單例設計模式
多執行緒之 單例設計模式 餓漢式 多執行緒安全 1 餓漢式 class single static single getinstance public void show class a implements runnable class test catch interruptedexceptio...