|
|
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
знающие, как решить проблему, подскажите пожалуйста... создаю окошко с 2 кнопками, конект и дисконект. перед конектом, создается новый поток для работы с sql, приложение конектится к sql серверу. перед выполнением каждого запроса, приложение проверяет, не оборвалась ли связь, если нет, то соответственно выполняется запрос. А вот если связь пропала, мне соответственно нужно опять соединиться....соединение у меня происходит в run(), т.е. при старте потока, как мне быть? убить текущий поток и создать новый? (если так можно, то подскажите примерчиком пожалуста) или можно както более лучше это реализовать. если сильно глупый вопрос, то не бейте пожалуста ногами только, голова уже деревянная стала, как застопарился на этом, так и все встало:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 15:36:51 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
Напиши пул коннектов. Или совсем тупой метод: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. При каждом обращении к коннекту - получай его через этот метод. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 15:42:49 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
Тьфу, имел в виду: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 15:43:27 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
вот мой примерчик ... ... здесь идет конструктор окна с кнопками... ... ... ActionListener al = new ActionListener() { public void actionPerformed(ActionEvent e) { if(e.getSource() == disconnectButton) { sql.stopThread(); sql.disconnect(); frame.setIconImage(stopIcon); disconnectButton.setEnabled(false); connectButton.setEnabled(true); }else{ if(e.getSource() == connectButton){ sql.connect(); frame.setIconImage(startIcon); connectButton.setEnabled(false); disconnectButton.setEnabled(true);... ...другие кнопки ... класс SQL ... ... public void stopThread() { ct.interrupt(); } public void connect() { ct = new ConnectThread(); ct.start(); }... ... class ConnectThread extends Thread { public void run() { try { while (!interrupted() && !connecting()) { event.write("SQL: (302); Will triing to connect to IMC SERVER after 10 seconds "); sleep(10000); } } catch(InterruptedException exception) { event.write("SQL: (304); Thread stopped - "+exception); } } } public boolean connecting() { try { conn = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/xxx;User=xxx;Password=xxx"); if (conn.isClosed()==false) { event.write("SQL: (316); Connection to IMC SERVER established"); return true; } else return false; } catch(Exception e) { event.write("SQL: (324); Error establishing connection to IMC SERVER " + e); return false; } } вся проблема возникает при вызове public boolean getsql(String sql) { try { if (conn.isClosed()) connect(); ////<------------------- if (stmt == null) stmt = conn.createStatement(); rs = stmt.executeQuery(sql); return true; } catch(Exception e) { connect(); return false; } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 15:45:19 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
еще бы научиться так красиво вставлять в сообщения исходный код:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 15:46:11 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
Пользуйтесь тегом [src] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 15:47:59 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
Разжевывать дальше? Или всё понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 15:48:37 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
Перезапуск потока практика неправильная. Что вы будете делать, когда интерфейсов будет много и стейтментов будет много? Эффективнее будет их создавать при входе в интерфейс, а при выходе убивать, правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 15:49:38 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 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. 40. 41. 42. 43. 44. 45. 46. 47. 48. спасибо Guest если не затруднит, то дальше разжевывать.... меня интересует больше как сделать это в потоке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 15:53:47 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
при выходе я и поток и стейтмент убиваю Код: plaintext 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. 40. 41. 42. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 15:55:18 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
но если связь оборвалась из за интернета или еще чего...то мне нужно переконектиться....т.е. убить поток в котором я сейчас нахожусь и создать его заново ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 15:56:30 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. запросы я выполняю вот так из созданного потока ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 15:59:06 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
Поток 1: Код: plaintext 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. Поток 2: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Оочень приблизительно. Но суть в том, что один поток у тебя постоянно спит, а второй его по необходимости дергает. Если второй поток не может нащупать соединение, он дергает первый и засыпает, а потом пробует снова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 16:00:13 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
спасибо Anarion , сейчас попробую... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 16:11:40 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
Ахтунг, господа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 16:21:46 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
Anarion Оочень приблизительно. Но суть в том, что один поток у тебя постоянно спит, а второй его по необходимости дергает. Если второй поток не может нащупать соединение, он дергает первый и засыпает, а потом пробует снова. Ахтунг, господа! Зачем такие сложности??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 16:23:41 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
(меня всё равно забанят) Anarion Оочень приблизительно. Но суть в том, что один поток у тебя постоянно спит, а второй его по необходимости дергает. Если второй поток не может нащупать соединение, он дергает первый и засыпает, а потом пробует снова. Ахтунг, господа! Зачем такие сложности??? есть вариант проще?:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 16:31:25 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
denissh есть вариант проще?:) Конечно, есть. Зачем тебе отдельный поток для работы с СУБД? Что это дает, если ты всё-равно при ошибки подключения сидишь как дундук и ждешь, пока не появится коннект? Сделай статический класс с синхронизированными методами и будет табе щястье. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 16:34:49 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
(меня всё равно забанят) Сделай статический класс с синхронизированными методами и будет табе щястье. а пока конекта нету, интерфейс с кнопочками будет висеть в пространстве, да? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 16:38:32 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
denissh а пока конекта нету, интерфейс с кнопочками будет висеть в пространстве, да? Сколько времени занимает установка соединения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 16:53:54 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
И как часто производится подобное переподключение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 16:54:47 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
(меня всё равно забанят)И как часто производится подобное переподключение? если с нетом нормально, то секунд 10... часто бывают проблемы с нетом, вырубают минут на 10-20 сетевики, иногда sql вырубаем, бывает комп перегружается и прочее только начал делать прогу, думал что все просто, и все работало...пока рубанули инет, и не понял что нужно делать в другом потоке:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 17:01:43 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
автора пока конекта нету, интерфейс с кнопочками будет висеть в пространстве, да? Если коннект очень медленный, то лучше тогда выводить окно, что типа "я стараюсь" и идти делать коннект. С потоками, которые зависят друг от друга связываться себе дороже. Тебе придется тогда предусмотреть случай, когда коннект невозможен (злой админ вырубил инет), отмену коннекта (надоело ждать), плюс синхронизировать их не на sleep а на wait, плюс обрабатывать возможность падения первого потока. В общем, оно тебе нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 17:05:16 |
|
||
|
вопрос о потоках
|
|||
|---|---|---|---|
|
#18+
AnarionЕсли коннект очень медленный, то лучше тогда выводить окно, что типа "я стараюсь" и идти делать коннект. С потоками, которые зависят друг от друга связываться себе дороже. Тебе придется тогда предусмотреть случай, когда коннект невозможен (злой админ вырубил инет), отмену коннекта (надоело ждать), плюс синхронизировать их не на sleep а на wait, плюс обрабатывать возможность падения первого потока. В общем, оно тебе нужно? емое.....так а как можно сделать подругому, пользователь даже не сможет закрыть окошко, пока конект не появиться???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 17:07:59 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34238484&tid=2147037]: |
0ms |
get settings: |
20ms |
get forum list: |
25ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
65ms |
get topic data: |
18ms |
get forum data: |
4ms |
get page messages: |
94ms |
get tp. blocked users: |
2ms |
| others: | 329ms |
| total: | 571ms |

| 0 / 0 |
