我创建了一个使用JSCH库读取和写入远程位置属性文件的应用程序。
我想同步写操作。
这是我的代码,
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) {
}
}
}
这就是我想要的
如果用户尝试写入Web应用中的属性文件说'A',则尝试写入同一webapp的同一文件的所有其他用户应该等待,但是另一个用户可以写入另一个文件在另一个webapp上使用相同的Web应用程序或同名文件。
同步方法可以完成所有这些工作吗?如何识别webapp和属性文件?
我们是否需要同步读写操作?
如何在这种情况下实施锁定?
注意:我已经看到了关于并发性的不同问题,但是我不怀疑这就是为什么我要问新问题,请帮我澄清一下这个问题
答案 0 :(得分: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,因为无论您使用哪种方法,都需要保护共享可变状态。同上二等。