подскажите, пожалуйста, решил задачу и посмотрел в обсуждение задачи решения других ребят - все решали через ready(), я сделал через условие.
в чем отличие этого решения от ready() и считается ли что я решил задачу?
просто я всего лишь проверил на то, является строка null или нет, потому что закрытый readLine() может вернуть null, а остальные ребята проверяли на занятость reader, как я понял, и на его зависание (занятость другими потоками)
а еще не знаю, нужно ли вообще было это условие на null, ведь по сути ничего не изменилось - все работало без него, просто валидатор не принимал решение
public class Solution {
public static volatile AtomicInteger readStringCount = new AtomicInteger(0);
public static volatile BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
//read count of strings
int count = Integer.parseInt(reader.readLine());
//init threads
ReaderThread consolReader1 = new ReaderThread();
ReaderThread consolReader2 = new ReaderThread();
ReaderThread consolReader3 = new ReaderThread();
consolReader1.start();
consolReader2.start();
consolReader3.start();
while (count > readStringCount.get()) {
}
consolReader1.interrupt();
consolReader2.interrupt();
consolReader3.interrupt();
System.out.println("#1:" + consolReader1);
System.out.println("#2:" + consolReader2);
System.out.println("#3:" + consolReader3);
reader.close();
}
public static class ReaderThread extends Thread {
private List<String> result = new ArrayList<String>();
public void run() {
//add your code here - добавьте код тут
while(!Thread.currentThread().isInterrupted()){
try {
String s = reader.readLine();
if(s == null)
throw new IOException() ;
readStringCount.getAndIncrement();
result.add(s);
}
catch (IOException ignored){
}
}
}
@Override
public String toString() {
return result.toString();
}
}
}