java同步肯定/否定和使用

时间:2018-05-24 01:20:47

标签: java synchronized

我已经阅读了关于同步方法如何运作的所有理论,但我需要一个实际的例子。

正面和负面是什么或使用同步这样:

public class Test {
    public static void main(String[] args){
        boolean sync = Boolean.valueOf(args[0]);
        Person person1 = person2 = new Person();

        person1.write(sync, args[1]);
        person1.read(sync);
        person2.write(sync, args[1]);
        person2.read(sync);

    }
}

write命名项目:(同步或不同步)

public static String project_name = "";

并且读取正在打印此人的当前名称(同步或不同步)

那么当写入和读取是常规方法与同步方法之间有什么区别?

如果我使用常规方法会出现什么问题?

1 个答案:

答案 0 :(得分:0)

快速回答: 由多个源访问的非同步方法通常会导致未定义的行为,但同步方法每次都会起作用。

更长的回答: 我不认为你完全理解同步方法是什么,因为你的代码根本没有证明它。

如果确实有100个人可能访问相同的方法,那么当写入和读取相同的变量时,您将有未定义的行为。

但是,如果同步访问该方法,则每个方法调用都将添加到队列中,并按顺序发生。

例如: 100个不同的线程(People?)可以在下面的代码上调用SynchronizedProjectName.renameProject("exampleName");和/或SynchronizedProjectName.projectName();,并且不会发生错误,并且不会同时发生读/写。

public class SynchronizedProjectName {
    private string project_name = "";

    public synchronized void renameProject(String newProjectName) {
        project_name = newProjectName;
    }

    public synchronized string projectName() {
        return project_name;
    } 
}

在处理多个线程/用户时,您应始终使用某种线程安全策略,如果不这样做,那么您应该期望您的代码行为异常并可能崩溃。

请点击此处查看一些额外信息:https://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html