Задача решена, но остался вопрос. Я изначально написала код с проверкой того, что reader свободен try { if (reader.ready()) { result.append(reader.readLine()); result.append(" "); } Логика моего размыления была в том, что у нас 2 потока, и каждый из них должен знать, не занят ли сейчас reader другим потоком. Хотя в моем случае метод join и так не дает второму потоку взаимодействовать с reader до момента пока первый не закончит работу. Но тем не менее, почему в данном случае при запуске вывод на экран не происходит и даже не дается ввести строки, сразу задача закрывается с 0. В ком случае тогда нужна проверка reader.ready()? Заранее спасибо:) Полный код ниже: 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 { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); StringBuilder result = new StringBuilder(); public void run() { for (int i = 0; i < 3; i++) { try { //if (reader.ready()) { result.append(reader.readLine()); result.append(" "); // } } catch (IOException e) { e.printStackTrace(); } } } public void printResult() { System.out.println(result); } } //add your code here - добавьте код тут }