我已经阅读了关于同步方法如何运作的所有理论,但我需要一个实际的例子。
正面和负面是什么或使用同步这样:
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 = "";
并且读取正在打印此人的当前名称(同步或不同步)
那么当写入和读取是常规方法与同步方法之间有什么区别?
如果我使用常规方法会出现什么问题?
答案 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