在java中发生线程同步时?

时间:2017-07-15 14:39:29

标签: java multithreading concurrency java.util.concurrent

是Java Thread的新手,在阅读时我可以看到线程对象上的相同实例应该等到当前线程完成执行。 考虑我有两个对象,一个是WebApp

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) {

        }
    }

}

所以如果我创建两个线程,第二个对象是否应该等待执行同步方法?或者它可以并行执行该方法。

        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();

注意:更新的线程访问相同的资源

如果两个用户尝试访问相同的资源,上面的代码会阻止第二个用户?如果没有,请帮助我正确的方法。

1 个答案:

答案 0 :(得分:0)

您有两个不同的对象配置为写入两个不同的文件。

根据您在此处显示的内容,没有什么可以防止它们使用这两个线程并行运行。

您只需要在线程访问相同数据时进行同步。