для первых 10 строк ...
SELECT * FROM msgtable WHERE cdate='18/07/2012' LIMIT 0,10
для следующих 10 строк
SELECT * FROM msgtable WHERE cdate='18/07/2012' LIMIT 10,10
Нет. InterruptedException
генерируется только в том случае, если вы сами прерываете поток. Если вы сами не используете Thread.interrupt ()
, то я бы либо повторно выбросил его как своего рода «неожиданное исключение», либо зарегистрировал как ошибку и двинулся дальше. Например, в моем коде, когда мне приходится перехватывать InterruptedException
и я никогда сам не вызываю interrupt ()
, я делаю эквивалент
catch (InterruptedException exception) {
throw new RuntimeException("Unexpected interrupt", exception);
}
, если это неожиданно. Есть много мест, где я намеренно прерываю свои потоки, и в этих случаях я обрабатываю исключения InterruptedException
четко определенным образом. Обычно это '
Вы должны выйти из метода run () после того, как вы выполнили любую очистку, требуемую вашим потоком.
HTH
Если вы не знаете, как справиться с этим в методе, я предлагаю вам объявить его в методе с throws InterruptedException (и его вызывающей стороной и т. Д.)
Если это то, чего вы никогда не ожидаете произойдет, я бы поймал его и заключил в AssertionError.
Да, вы необходимо беспокоиться о InterruptedException
, так же как вам нужно беспокоиться о любом другом проверенном исключении, которое вы должны либо генерировать, либо обрабатывать.
В большинстве случаев возникает InterruptedException
сигнализирует о запросе остановки, скорее всего, из-за того, что поток, в котором выполнялся ваш код, был прерван .
В вашей конкретной ситуации пул соединений, ожидающий получения соединения, Я бы сказал, что это проблема отмены, и вам необходимо прервать сбор, очистку и восстановить прерванный флаг (см. Ниже).
Например, если вы используете какой-то Runnable
] / Callable
, запущенный внутри Executor
, тогда вам нужно правильно обработать InterruptedException:
executor.execute(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch ( InterruptedException e) {
continue; //blah
}
pingRemoteServer();
}
}
});
Это будет означать, что ваша задача никогда не подчиняется механизму прерывания, используемому исполнителем, и не позволяет правильная отмена / завершение работы.
Вместо этого правильная идиома - восстановить прерванное состояние и затем остановить выполнение:
executor.execute(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch ( InterruptedException e) {
Thread.currentThread().interrupt(); // restore interrupted status
break;
}
pingRemoteServer();
}
}
});
Полезные ресурсы :
Потоки можно прервать, вызвав Thread.interrupt (). Он используется для изящного сообщения потоку о том, что он должен сделать что-то еще. Обычно это приводит к тому, что блокирующие операции (например, Thread.sleep ()) возвращаются раньше и генерируют InterruptedException. Если поток прерывается, на нем устанавливается флаг. Этот флаг можно запросить с помощью вызова Thread.isInterrupted ().
Если вы не используете прерывание потока и по-прежнему получаете это исключение, вы можете просто выйти из потока (и желательно зарегистрировать исключение).
В общем, это зависит от того, что делает ваше многопоточное приложение.