Я только начинаю основы работы с потоками в java. Синхронизированное ключевое слово говорит планировщику не переключать контекст во время выполнения потока.Кроме того, состояние гонки происходит, когда поток пытается получить доступ к одному и тому же ресурсу.Имея это в виду, я создал простой класс, чтобы продемонстрировать эту концепцию самому себе.
public class DemoThread{
int i = 1;
public void runThreads() {
Thread t1 = new Thread(new Runnable () {
@Override
public void run() {
synchronized(this) {
i++;
System.out.println("Thread 1: " + i);
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
synchronized(this) {
i--;
System.out.println("Thread 2: " + i);
}
}
});
for (int k = 0; k <=100; k++) {
t1.start();
t2.start();
}
}
}
У меня просто внизу forloop для выполнения этих потоков 100 раз.Тем не менее, я получаю эту ошибку в консоли:
Thread 2: 1Exception in thread "main"
Thread 1: 1
java.lang.IllegalThreadStateException
at java.base/java.lang.Thread.start(Thread.java:795)
at thread_demo.DemoThread.runThreads(DemoThread.java:31)
at thread_demo.main.main(main.java:9)
Почему это?