Не могу понять, почему так происходит.
Когда в скобках прописываю класс, то вывод соответствует задаче.
"a b c
d e f"
synchronized(Read3Strings.class){}
Но когда прописываю туда объект текущего класса, то вывод непредсказуемый.
synchronized(this){}
Почему так?
Полный блок кода.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Solution {
public static volatile BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws InterruptedException {
Read3Strings t1 = new Read3Strings();
Read3Strings t2 = new Read3Strings();
t1.start();
t2.start();
t1.join();
t2.join();
t1.printResult();
t2.printResult();
}
public static class Read3Strings extends Thread {
private String text = "";
public void run(){
synchronized(this){
for(int i = 0; i < 3; i++) {
try {
text += reader.readLine() + " ";
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void printResult(){
System.out.println(text);
}
}
}