Быстрый ответ: Несинхронный метод, к которому обращаются из нескольких источников, обычно вызывает неопределенное поведение, но синхронизированный метод будет работать каждый раз.
Более длинный ответ: Я не думаю, что вы полностью понимаете, что такое синхронизированный метод, потому что ваш код не демонстрирует его вообще.
Если на самом деле есть возможность доступа 100 человек к одному и тому же методу, то у вас будет неопределенныйповедение при записи и считывании одной и той же переменной.
Однако, если к этому методу обращаются синхронно, каждый вызов метода добавляется в очередь и происходит по порядку.
Дляпример: 100 различных потоков (люди?) могут вызывать 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