-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();
注:更新線程訪問同一資源
如果兩個用戶試圖訪問相同的資源將上面的代碼塊中的第二個用戶?如果不是,請以正確的方式幫助我做到這一點。
所以相同的實例意味着WebAppProperty對象的實例值應該是相同的,對吧?如果兩個相同的線程(WebAppProperty)意味着他們訪問相同的數據將不得不等待?如果它們是不同的對象意味着訪問不同的數據,他們可以不等待就執行該方法? –
我已經更新了這個問題,想知道的是如果兩個用戶試圖訪問相同的資源,我可以使用syncronized方法阻止他們嗎?上面的代碼是否可以工作 –
第一個問題是:你是否深入研究了這個重複問題? – GhostCat