我從一本公認的示例書中看到了這一點,所以很難回答,然後有些我不明白的地方。靜態變量,線程和構造函數Java
稱爲DataflightsService類包含名爲FlightFileAccess一個私有靜態變量出現每次我們創建DataflightsService一個新的對象FlightFileAccess的構造函數
即
public class DataflightsService{
private static FlightFileAccess fileAccess=null;
public DataflightsService(String path){
fileAccess=new flightFileAccess(path);
}
public boolean removeflight(String code){
//We use this static instance that wraps functionality to remove a flight
fileAccess.remove(code);
}
}
開始其被實例化
對我來說,這意味着我們每次創建的實例10,在構造函數中使用的是不同的對象所有的時間靜態變量FlightFileAccess
在原有
FlightFileAccess
類:我們有一個同步的RandomAccessFile
Class FlightFileAccess{
private RandomAccessFile database = null;
private boolean remove(String code){
// Other code goes here and there
synchronized (database) {
//Perform deletion code
}
}
是因爲remove方法我們正在使用不同的參考FlightFileAccess
我們也使用不同的參考RandomAccessFile
?
這意味着,有FlightFileAccess
靜態服務不會成爲這裏synchronize
在RandomAccessFile
,因爲它是每次所以每個DataflightsService
實例將做隨機訪問的文件忽略了同步他們的事一個新的。與在靜態啓動器中實例化FlightFileAccess
相反。我對嗎?
我會盡可能多的解釋,以提供最好的方式來實例化DataflightsService
多少倍(我們可以說想象每個客戶端都有自己的實例DataflightsService
),然後才能夠同步在一個文件中刪除例如,以便沒有幾個客戶訪問該文件的混亂。對不起,我需要爲每個客戶端添加一個DataflightsService
bc沒有cookie。
請編輯您的問題,並將代碼格式化爲代碼,並將其縮進。 – 2015-04-03 15:47:10
僅僅因爲你在一本書中找到了建議,這並不會自動提供建議。構造函數無條件地分配一個靜態字段?這聽起來像嚴重不好的設計。 – 2015-04-03 17:09:40