Не могу понять, почему так происходит. Когда в скобках прописываю класс, то вывод соответствует задаче. "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);
        }
    }
}