Создал класс
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());
}
}
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ