Пример 1, код который не работает, точнее программа просто закрывается без ошибки и выводит 0, но ничего не считывает:
public static class Read3Strings extends Thread{
        private ArrayList <String> list = new ArrayList<>();
                                                                             // тут в следующем примере будет счетчик для while
        @Override
        public void run() {
            try{
                for(int i = 0; i < 3; i++){                           //тут в следующем примере будет while
                    if(reader.ready()){
                        list.add(reader.readLine());
                    }
                }
            } catch (IOException e){
            }
        }
        public void printResult(){
            for(String l : list){
                System.out.print(l + " ");
            }
            System.out.print("\n");
        }
    }
Пример 2, тут все работает нормально, разница только в использовании while вместо for
public static class Read3Strings extends Thread{
        private ArrayList <String> list = new ArrayList<>();
        private int count = 0;

        @Override
        public void run() {
            try{
                while(count < 3){
                    if(reader.ready()){
                        list.add(reader.readLine());
                        count++;
                    }
                }

            } catch (IOException e){

            }
        }

        public void printResult(){
            for(String l : list){
                System.out.print(l + " ");
            }
            System.out.print("\n");
        }
    }
}