|
|
|
Зависает!
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Столкнулся с непонятной проблемой. Иногда программа зависает на создании подключения(DriverManager.getConnection). Эта функция не единственная. Дело в том что ее могут вызывать сразу несколько потоков. И если в одном из вызовов зависло, то все... Остальные ждут пока поток вызвавший ее не разблокирует. В чем может быть причина? Пример функции: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2013, 05:58:42 |
|
||
|
Зависает!
|
|||
|---|---|---|---|
|
#18+
GorloPavelВ чем может быть причина? Видимо в драйвере JDBC. Можно снять дамп потоков и посмотреть, где зависло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2013, 20:15:38 |
|
||
|
Зависает!
|
|||
|---|---|---|---|
|
#18+
1) За DriverManager.getConnection() как правило скрывается пул соединений ограниченного размера. Когда другие потоки забрали все потоки, очередной поток зависнет на этом методе до тех пор, пока не появится доступного соединения. 2) У вас метод в добавок ко всему объявлен synchronized, что привносит дополнительную блокировку. Пока один поток ждет получения соединения, другие потоки не могут войти в этот метод. 3) У вас некорректно написан последний try-catch блок. Если у вас mStatement.close() бросит исключение, то mConnection.close() уже не будет вызван. Так писать нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2013, 20:38:06 |
|
||
|
Зависает!
|
|||
|---|---|---|---|
|
#18+
GorloPavel, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2013, 22:31:15 |
|
||
|
Зависает!
|
|||
|---|---|---|---|
|
#18+
UsmanGorloPavel, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2013, 22:41:23 |
|
||
|
Зависает!
|
|||
|---|---|---|---|
|
#18+
cdtyjv1) За DriverManager.getConnection() как правило скрывается пул соединений ограниченного размера. Когда другие потоки забрали все потоки, очередной поток зависнет на этом методе до тех пор, пока не появится доступного соединения..Что-то я затупил и вместо DriverManager увидел DataSource За DriverManager пулов обычно нет, поэтому мой п.1 нужно проигнорировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2013, 22:42:28 |
|
||
|
Зависает!
|
|||
|---|---|---|---|
|
#18+
GorloPavelЭта функция не единственнаяcdtyjv, Предположим, что у ТС есть функция getHostBusy(...) , которая опрашивает базу с интервалом в 2 сек. в отдельном потоке... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2013, 22:52:31 |
|
||
|
Зависает!
|
|||
|---|---|---|---|
|
#18+
UsmanПредположим, что у ТС есть функция getHostBusy(...) , которая опрашивает базу с интервалом в 2 сек. в отдельном потоке...А теперь давайте предположим, что на очередной итерации ваша соединение внезапно оказывается закрытым (сетка глюканула, СУБД перезагрузили, и т.д.). Что будете делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2013, 23:06:38 |
|
||
|
Зависает!
|
|||
|---|---|---|---|
|
#18+
cdtyjvЧто будете делать?Конечно же реконнект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2013, 23:07:56 |
|
||
|
Зависает!
|
|||
|---|---|---|---|
|
#18+
Но тогда вот это код надо менять, ибо он не учитывает реконнект: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2013, 23:34:01 |
|
||
|
Зависает!
|
|||
|---|---|---|---|
|
#18+
cdtyjvНо тогда вот это код надо менять, ибо он не учитывает реконнект: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. А что делть если у меня несколько функций и несколько потоков которые вызывают их? Что будет если в первой функции произойдет rollback а в первой еще не выполнился запрос? mConnection же один! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2013, 06:06:29 |
|
||
|
Зависает!
|
|||
|---|---|---|---|
|
#18+
GorloPavel , Connection не является thread-safe, с ним нельзя работать из разных потоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2013, 08:58:13 |
|
||
|
Зависает!
|
|||
|---|---|---|---|
|
#18+
cdtyjv GorloPavel , Connection не является thread-safe, с ним нельзя работать из разных потоков. Ну так у меня же он создается каждый раз? Функция synchronized, значит только один поток с ним может работать. Потом Connection закрывается. А следующий поток делает тоже самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2013, 09:10:45 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=207&tid=2128475]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 189ms |
| total: | 321ms |

| 0 / 0 |
