|
|
|
Потоки и синхронизация. Дедлок
|
|||
|---|---|---|---|
|
#18+
Всем здрасти). Пытаюсь познакомиться с потоками в java. Есть очень простой код: Код: 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. из теста на intuit.ru к лекции http://www.intuit.ru/department/pl/javapl/class/free/12/. Собственно, вопрос - почему тут дедлок? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2012, 11:06:54 |
|
||
|
Потоки и синхронизация. Дедлок
|
|||
|---|---|---|---|
|
#18+
Обязательное условие возникновения дедлока это минимум два потока и минимум два критических ресурса. Здесь же у нас только один критический ресурс - lock. Откуда взяться взаимоблокировке, немного не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2012, 11:16:16 |
|
||
|
Потоки и синхронизация. Дедлок
|
|||
|---|---|---|---|
|
#18+
BlazkowiczОбязательное условие возникновения дедлока это минимум два потока и минимум два критических ресурса. Здесь же у нас только один критический ресурс - lock. Откуда взяться взаимоблокировке, немного не понятно. Ааа.. Тю, SomeClass два раза создаётся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2012, 11:16:40 |
|
||
|
Потоки и синхронизация. Дедлок
|
|||
|---|---|---|---|
|
#18+
Тогда не понятно где тут вообще блокировки, у каждого потока свой лок. Второй поток ничего не знает про состояние первого и не может им упралять, так как лок у них не общий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2012, 11:18:31 |
|
||
|
Потоки и синхронизация. Дедлок
|
|||
|---|---|---|---|
|
#18+
Тогда я, видимо, путаю понятия. При компиляции и выполнении этого кода я постоянно в консоли получаю "2" и программа не завершается. Интересно, почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2012, 11:20:58 |
|
||
|
Потоки и синхронизация. Дедлок
|
|||
|---|---|---|---|
|
#18+
rasmtpПри компиляции и выполнении этого кода я постоянно в консоли получаю "2" и программа не завершается. Интересно, почему? Потому что первый поток "засыпает" на lock.wait(); и никто его нигде не будит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2012, 11:22:30 |
|
||
|
Потоки и синхронизация. Дедлок
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТогда не понятно где тут вообще блокировки, у каждого потока свой лок. Второй поток ничего не знает про состояние первого и не может им упралять, так как лок у них не общий. ааа).. получается, первый поток так и будет висеть, потому что некому его разблокировать). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2012, 11:24:39 |
|
||
|
Потоки и синхронизация. Дедлок
|
|||
|---|---|---|---|
|
#18+
rasmtpааа).. получается, первый поток так и будет висеть, потому что некому его разблокировать). нет. wait() это не "блокировка". "блокирвка" это synchronized. wait() это прямое указание потоку ждать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2012, 11:26:04 |
|
||
|
Потоки и синхронизация. Дедлок
|
|||
|---|---|---|---|
|
#18+
как все просто). спасибо большое. буду внимательнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2012, 11:26:20 |
|
||
|
Потоки и синхронизация. Дедлок
|
|||
|---|---|---|---|
|
#18+
На будущее - возьми лочки из пакета java.util.concurrent они намного удобнее в пользовании, чем Object. Что лок, что Обджект можно (и нужно) использовать как объект. В частности отдавать в другой поток как параметр функции или конструктора. Типичный пример: final Object lock = new Object(); synchronized(lock){ new Thread(){ public void run(){ synchronized(lock){ try{я тута чего-то творю }finally{lock.notify();} } }}.start(); lock.wait(); } Как видишь, дёшево и сердито новый анонимный поток кушает лочку. Фактически при этом она идёт в конструктор потоку (при компиляции). Заметь, насколько кратко и понятно выглядит конструкция, при этом не требующая дополнительных объявлений. Всё в одном месте кода. Если поток делать именованным классом, принимай лочку в конструкторе, но задействуй только внутри метода run(). В противном случае не сможешь гарантировать что новый поток не успеет отработать до того как порождающий заснёт. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2012, 22:27:23 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37969560&tid=2130879]: |
0ms |
get settings: |
15ms |
get forum list: |
15ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
63ms |
get topic data: |
18ms |
get forum data: |
5ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
| others: | 296ms |
| total: | 500ms |

| 0 / 0 |
