2017-07-15 71 views
-2

剛剛接觸Java線程,在閱讀時我看到線程對象上的相同實例應該等到當前線程完成執行。 考慮我有兩個對象,一個是Web應用程序在java中發生線程同步時?

class WebApp{ 
    private String webappName; 
    private boolean isQA = false; 
    private String path ; 

    public WebApp(String name , String path , boolean isQA){ 
     this.webappName = name; 
     this.path = path; 
     this.isQA = isQA; 
    } 
} 

另一個是WebAppProeprty

class WebAppProperty implements Runnable{ 

    private WebApp webapp; 
    private String propertyFile; 
    private String keyValue; 
    public String getKeyValue() { 
     return keyValue; 
    } 
    public void setKeyValue(String keyValue) { 
     this.keyValue = keyValue; 
    } 
    public String getPropertyFile() { 
     return propertyFile; 
    } 
    public void setPropertyFile(String propertyFile) { 
     this.propertyFile = propertyFile; 
    } 

    @Override 
    public void run(){ 
     writeToPropertyFile(); 
    } 
    public WebAppProperty(WebApp webapp , String propertyFile){ 
     this.webapp = webapp; 
     this.propertyFile = propertyFile; 
    } 


    private synchronized void writeToPropertyFile(){ 
     try{ 
      // code for write property into text file. 
     }catch (Exception e) { 

     } 
    } 

} 

所以,如果我創建了兩個線程一樣,將第二個對象應該等待執行syncronized方法?或者它可以並行執行該方法。

 WebApp app1 = new WebApp("webapp1", "staging/folder", false); 
     WebAppProperty webappProp1 = new WebAppProperty(app1, "a.proeprties"); 
     webappProp1.setKeyValue("keyvalue"); 


     WebAppProperty webappProp2 = new WebAppProperty(app1, "a.proeprties"); 
     webappProp2.setKeyValue("keyvalue"); 

     Thread t1 = new Thread(webappProp1); 
     t1.start(); 
     Thread t2 = new Thread(webappProp2); 
     t2.start(); 

注:更新線程訪問同一資源

如果兩個用戶試圖訪問相同的資源將上面的代碼塊中的第二個用戶?如果不是,請以正確的方式幫助我做到這一點。

回答

0

將兩個不同的對象配置爲寫入兩個不同的文件。

從你在這裏展示的東西,沒有什麼應該阻止它們使用兩個線程並行運行。

你只需要同步線程,當他們應該訪問相同的數據。

+0

所以相同的實例意味着WebAppProperty對象的實例值應該是相同的,對吧?如果兩個相同的線程(WebAppProperty)意味着他們訪問相同的數據將不得不等待?如果它們是不同的對象意味着訪問不同的數據,他們可以不等待就執行該方法? –

+0

我已經更新了這個問題,想知道的是如果兩個用戶試圖訪問相同的資源,我可以使用syncronized方法阻止他們嗎?上面的代碼是否可以工作 –

+1

第一個問題是:你是否深入研究了這個重複問題? – GhostCat