0

JSCHライブラリを使用してリモートロケーションプロパティファイルを読み書きするためのアプリケーションを作成しました。javaを使用してファイル操作を同期する方法は?同期またはロック?

書き込み操作を同期します。

これにより、ユーザは、「A」と言うのWebアプリケーションのプロパティファイルにに他のすべてのユーザーの書き込みしようとするとこれは私が

  • 欲しいものです

    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; 
        } 
        public String getWebappName() { 
         return webappName; 
        } 
        public void setWebappName(String webappName) { 
         this.webappName = webappName; 
        } 
        public boolean isQA() { 
         return isQA; 
        } 
        public void setQA(boolean isQA) { 
         this.isQA = isQA; 
        } 
        public String getPath() { 
         return path; 
        } 
        public void setPath(String path) { 
         this.path = path; 
        } 
    } 
    
    class WebAppProperty implements Runnable{ 
    
        private WebApp webapp; // webapp-1 
        private String propertyFile; // server.properties 
        private String 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,String keyValue){ 
         this.webapp = webapp; 
         this.propertyFile = propertyFile; 
         this.keyValue = keyValue; 
    
        } 
    
        private void writeToPropertyFile(){ 
         try{ 
          // code for writing key value pair into remote file 
         }catch (Exception e) { 
    
         } 
        } 
    
    } 
    

    、私のコードです同じwebappの同じファイルに書き込もうとする人は待たなければならないが、別のユーザーが別のWebapp上の同じWeb Appまたは同じ名前のファイルに書き込むことができる。

    これらのすべての作業を同期メソッドで実行できますか?どのようにWebアプリケーションとプロパティファイルを識別しますか?

読み取りと書き込みの両方の操作を同期させる必要がありますか?

このシナリオではロックを実装する方法は?

注:次のように私は、並行性に関するさまざまな質問を見ていたが、それらは、なぜ新しい質問をしています私の疑問をクリアしていない、この

+2

いいえ 'synchronized'は役に立ちません。あなたはあなたの選択肢を制限するアプローチを選択します。私が見るのはロックファイルだけです。特別なファイルが存在することを確認し、それが作成されていない場合は、プロパティファイルを変更して「ロック」ファイルを削除してください。 – talex

+0

@talex私はロックの実装をチェックしましたが、紛らわしいのは、同じファイルだけで書き込み操作をロックする方法のようなものですか?スレッドがファイルAに書き込もうとする場合他のスレッドはファイルAに書き込むことはできませんが、ファイルA以外のファイルに書き込むことはできますか?ロックを使用するとどうなりますか?私が理解したことは、実行している操作をロックすることができるということです。 –

+0

@AnsarSamadは、WebAppPropertyインスタンスを作成して実行する部分を共有できますか? –

答えて

0

上の明確化を得るのWebappクラスを書くために私を助けてください:

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

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

public boolean isQA() { 
    return isQA; 
} 

public String getPath() { 
    return path; 
}  

}

次のようにwebappPropertyクラスを書く:

class final WebAppProperty implements Runnable{ 

private final WebApp webapp; // webapp-1 
private finalString propertyFile; // server.properties 
private final String keyValue; 

public String getPropertyFile() { 
    return propertyFile; 
}  

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

} 

private void writeToPropertyFile(){ 
    try{ 
     // code for writing key value pair into remote file 
    }catch (Exception e) { 

    } 
} 

}

このアプローチを使用する場合は、synchronizedを使用する必要はありません。どちらのクラスも不変クラスです。変更不可能な参照は、マルチスレッド環境で同期させることなく自由に共有することができます。これは、変更が一度作成されると、オブジェクトの存続期間中フリーズされるためです。オブジェクトに対して必要な変更は、新しいオブジェクトを作成することによってのみ実行できます。

上記のように不変クラスを作成しない場合は、Webappクラスのすべてのメソッドでsynchronizedを使用する必要があることに注意してください。第二クラスの同人。

+0

あるスレッドがA.propertiesファイルに書き込みを許可し、同じ時刻に他のスレッドをブロックして同じファイルに書き込むことを許可するが、他のスレッドに他のファイルに書き込みを許可する方法を教えてください。 –

+0

これを読む: http://www.javaspecialists.eu/archive/Issue215.html –

関連する問題