Сделал через StringBuffer, но решил посмотреть как реализовано в правильном решении и не могу понять, как это к public String result конкатенируют строки, ведь String неизменяемый класс, как получилось срастить всё в одну строку?
@Override
public void run() {
    try {
        result += reader.readLine() + " ";
        result += reader.readLine() + " ";
        result += reader.readLine();

    } catch (IOException e) {
        e.printStackTrace();
    }
}