Вопрос

Есть ли простой способ пропустить метод readLine () в Java, если он занимает дольше, чем, скажем, 2 секунды?

Вот контекст, в котором я задаю этот вопрос:

public void run()
{
    boolean looping = true;
    while(looping) {
        for(int x = 0; x<clientList.size(); x++) {
            try {
                Comm s = clientList.get(x);
                String str = s.recieve();
                // code that does something based on the string in the line above
            }
            // other stuff like catch methods
        }
    }
}

Comm - это класс, который я писал, а полученный метод, который содержит буферредер, называемый «в», это:

public String recieve()
{
    try { if(active) return in.readLine(); }
    catch(Exception e) { System.out.println("Comm Error 2: "+e); }
    return "";
}

Я заметил, что программа останавливается и ждет входного потока, чтобы иметь что-то прочитать, прежде чем продолжить. Что плохое, потому что мне нужна программа, чтобы сохранить цикл (как она петлями, она идет ко всем другим клиентам и запрашивает ввод). Есть ли способ пропустить процесс readline (), если нечего читать?

Я также уверен, что я не объясняю этого хорошо, поэтому, пожалуйста, задайте мне вопросы, если я запутаю.

Это было полезно?

Решение

Только промежуток времени не очень хорошая идея. Используйте одну нить на клиента (или используйте асинхронный ввод / вывод, но если вы не создадите некоторое высокое применение эффективности, это излишне сложно).

Что касается самоуправления, он должен быть сделан на потоке, который инкапсулирован. Смотреть, например Как я могу установить тайм-аут против буферреджера на основе URLConnection в Java?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top