|
|
|
Поток не останавливается после того, как вызывает метод
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Если вызываю interrupt() в течении 10 секунд пока поток спит, поток прерывается. После 10 сек начинается продолжительная выборка из MySQL. И если в это время вызвать interrupt(), то поток не останавливается. Что надо сделать, чтобы он остановлся (прервался)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 18:11 |
|
||
|
Поток не останавливается после того, как вызывает метод
|
|||
|---|---|---|---|
|
#18+
Сергей_ТВ, Почему вы не жалеете глаз читателей и не форматируете год? С одной стороны JDBC выборка в большинстве случаев это банальная блокировка на сокете, которая должна выкидывать InterruptedException. С другой стороны у JDBC есть штатные методы прерывкания, такие как Statement.cancel() и setQueryTimeout(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 18:16 |
|
||
|
Поток не останавливается после того, как вызывает метод
|
|||
|---|---|---|---|
|
#18+
Не понял смысл первой строки "Почему вы не жалеете глаз читателей и не форматируете год?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 18:25 |
|
||
|
Поток не останавливается после того, как вызывает метод
|
|||
|---|---|---|---|
|
#18+
А вообще ... Примите как данность, что попытки прерывать запросы к базе - череповаты. Иногда - крайне череповаты. Например - будете ждать дольше, чем если бы запрос отработал до конца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 18:33 |
|
||
|
Поток не останавливается после того, как вызывает метод
|
|||
|---|---|---|---|
|
#18+
Сергей_ТВНе понял смысл первой строки "Почему вы не жалеете глаз читателей и не форматируете год?" "Код", а не "год". Голова уже под вечер за руками не успевает. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 18:52 |
|
||
|
Поток не останавливается после того, как вызывает метод
|
|||
|---|---|---|---|
|
#18+
Про код-год понятно. Видимо нажал на src-> java , а текст при этом не выделил... Буду внимательнее. ... По сути вопроса понял, что если все работает, и к этому подключаешь нечто и все работать перестает, то скорее всего причина в нечтом.... мдаа, глубокая и полезная мысль Спасибо за ответы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 19:10 |
|
||
|
Поток не останавливается после того, как вызывает метод
|
|||
|---|---|---|---|
|
#18+
Сергей_ТВ, В потоке проверять флаг в цикле. Который выставляется снаружи потока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 19:25 |
|
||
|
Поток не останавливается после того, как вызывает метод
|
|||
|---|---|---|---|
|
#18+
Сергей_ТВ Если вызываю interrupt() в течении 10 секунд пока поток спит, поток прерывается. После 10 сек начинается продолжительная выборка из MySQL. И если в это время вызвать interrupt(), то поток не останавливается. Что надо сделать, чтобы он остановлся (прервался)? Thread#stop, в finally освобождать ресурсы. Может даже jdbc драйвер сумеет их корректно освободить, может даже всегда. (Я бы конечно на это надеяться не стал))) Поле flag не имеет гарантий видимости (если работать с ним из разных потоков). Да и вообще смысла не имеет (как видно из представленного когда). Если 'продолжительная выборка' - это чтение из резалтСета в цикле, то вот в этом самом цикле можно проверять не захотели-ли поток прервать извне (можно не на каждой итерации). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 06:25 |
|
||
|
Поток не останавливается после того, как вызывает метод
|
|||
|---|---|---|---|
|
#18+
avp.mk, Конечно, я и намекал на смысл остановки потока раньше выполнения им задачи. И не только я. Можно и комп выключать тремя клавишами, и вилкой из розетки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 09:08 |
|
||
|
Поток не останавливается после того, как вызывает метод
|
|||
|---|---|---|---|
|
#18+
avp.mk, Ну а про флаг и его видимость, то он вроди во всех потоковых наследниках есть из коробки. Иначе зачем они нужны? Там даже прогресс бар есть)) LOL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 09:21 |
|
||
|
Поток не останавливается после того, как вызывает метод
|
|||
|---|---|---|---|
|
#18+
avp.mkThread#stop Really? То-то его в Java 9 собираются из просто @Deprecated перевести в @Deprecated(forRemoval=true) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 10:24 |
|
||
|
Поток не останавливается после того, как вызывает метод
|
|||
|---|---|---|---|
|
#18+
Blazkowiczavp.mkThread#stop Really?avp.mkМожет даже jdbc драйвер сумеет их корректно освободить, может даже всегда. ( Я бы конечно на это надеяться не стал ))) Nope) Blazkowiczavp.mkThread#stop Really? То-то его в Java 9 собираются из просто @Deprecated перевести в @Deprecated(forRemoval=true) А вот это правда жаль. Хотя наверное позволит ускорить JVM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 10:40 |
|
||
|
Поток не останавливается после того, как вызывает метод
|
|||
|---|---|---|---|
|
#18+
Petro123avp.mk, Ну а про флаг и его видимость, то он вроди во всех потоковых наследниках есть из коробки. Сергей_ТВ public void run() { flag = true; while(!Thread.currentThread().isInterrupted() && flag){ prokladka(); } } private void prokladka(){ try { Thread.sleep(10000); potok (); } catch (InterruptedException e) { System.out.println("Поток прерван"); flag = false; } } Поле, говорю, это не нужно и к тому же имеет дефект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 10:46 |
|
||
|
Поток не останавливается после того, как вызывает метод
|
|||
|---|---|---|---|
|
#18+
avp.mk( Я бы конечно на это надеяться не стал )) да. Я это видел и согласен с тобой). У меня в JavaFX интересная штука в связи с этим. Я стартанул поток минут на 50 по клавише Выполнить из Eclipse. Потом, по середине работы закрыл приложение. А поток вроде как работает и продолжает выбрасывать в консоль результаты. Вот, например, в приложениях.exe такое закрытие полностью освободит память и все процессы-потоки-рессурсы связанные с этим главным окном. AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 10:49 |
|
||
|
Поток не останавливается после того, как вызывает метод
|
|||
|---|---|---|---|
|
#18+
avp.mkПоле, говорю, это не нужно и к тому же имеет дефект. а тут разве не поле? Я говорил о наследниках. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 10:54 |
|
||
|
Поток не останавливается после того, как вызывает метод
|
|||
|---|---|---|---|
|
#18+
avp.mkPetro123avp.mk, Ну а про флаг и его видимость, то он вроди во всех потоковых наследниках есть из коробки. Сергей_ТВ public void run() { flag = true; while(!Thread.currentThread().isInterrupted() && flag){ prokladka(); } } private void prokladka(){ try { Thread.sleep(10000); potok (); } catch (InterruptedException e) { System.out.println("Поток прерван"); flag = false; } } Поле, говорю, это не нужно и к тому же имеет дефект. Да, флаг не к месту здесь. Он должен стоять за пределами run(). ... Понятно, что врядли кто стал проводить опыты по остановке длительной по времени выборки из MySQL. Поэтому напишу, что сделал. В цикл чтения ResultSet добавил еще один флаг, а затем добавил условие для отмены стеймента Код: java 1. 2. 3. 4. 5. 6. 7. Это стало работать. Причем после прерывания работы потока и остановки процесса выборки из MySQL, в консоле активность работы кода прекращалась. А после повторного вызова потока(с выборкой в том числе), выборка начиналась с начальных условий. Ошибок не наблюдал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 15:27 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39351926&tid=2123469]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 352ms |

| 0 / 0 |
