Создал класс SomeThread implements Runnable В нем один метод incrementString(); добавляющий букву к строке и выводящий строки на консоль. Метод вызывается через run(); Если incrementString(); пометить synchronized, то вывод стабильно такой: a-b Thread-1 aa-bb Thread-0 А если без synchronized (как в коде ниже), то выводит, кроме прочих вариантов и так: a-b Thread-1 a-b Thread-0 Не могу понять почему так происходит. Получается, что одна из нитей не выполняет операцию s1 += или s2 += Кто поможет разобраться в этом конкретном примере? Заранее спасибо) public class TestThread { public static void main(String[] args) { SomeThread someThread = new SomeThread(); Thread thread1 = new Thread(someThread); Thread thread2 = new Thread(someThread); thread1.start(); thread2.start(); } } class SomeThread implements Runnable { String s1 = ""; String s2 = ""; @Override public void run() { try { incrementString(); } catch (IOException e) { e.printStackTrace(); } } void incrementString() throws IOException { s1 += "a"; s2 += "b"; System.out.println(s1+ "-" + s2 + " " + Thread.currentThread().getName()); } }