【问题标题】:When thread syncronization happens in java? [duplicate]java中什么时候发生线程同步? [复制]
【发布时间】:2017-12-20 12:33:35
【问题描述】:

我是 Java Thread 的新手,在阅读时我可以看到线程对象上的 same instances 应该等到当前线程完成执行。 考虑我有两个 Objects ,一个是 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();

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

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

【问题讨论】:

    标签: java multithreading concurrency java.util.concurrent


    【解决方案1】:

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

    从您在此处显示的内容来看,没有什么可以阻止它们使用两个线程并行运行。

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

    【讨论】:

    • 所以相同的实例意味着 WebAppProperty 对象的实例值应该相同,对吧?如果两个相同的线程(WebAppProperty)意味着他们访问相同的数据将不得不等待对吗?如果他们是不同的对象意味着访问不同的数据,他们可以执行该方法而无需等待?
    • 我已经更新了这个问题,我想知道的是,如果两个用户尝试访问相同的资源,我可以使用同步方法阻止他们吗?上面的代码是否有效
    • 第一个问题是:你是否深入研究过这个重复的问题?
    • 对不起,那个重复的消息让我很困惑,这个答案的不同实例和不同的线程语句让我很困惑。你能帮我澄清一下吗
    猜你喜欢
    • 2019-05-16
    • 2011-06-28
    • 2014-01-06
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 2016-06-28
    • 2014-07-04
    • 2019-08-27
    相关资源
    最近更新 更多