|
|
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! В требованиях к вакансиям среди прочих указано знание многопоточности. Простое изучение литературы без практики не даст результата. Отсюда вопрос - не посоветуете какие-нибудь задачи, решая которую можно изучить данную предметную область? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 13:37 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
andrsam, До определенного момента даст. Ну как минимум в обычный аутсорс интервью пройти шансы будут. Но, поддерживаю. Кстати предлагаю разобрать, кто чувствует силы в себе, по полочкам пример кода: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. P.S. Ожидаю, что сейчас посоветуют читать Concurrency in practise. Но для начала это слишком суровое чтиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 13:44 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
questioner, А несуровое чтиво не посоветуете?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 13:51 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
andrsamquestioner, А несуровое чтиво не посоветуете?) Для понимания общих принципов мне эта статья более менее нравится: http://www.javaspecialist.ru/2011/06/java-memory-model.html на хабре много статеек, но да, есть ощущение, что по нитке собираешь понимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 13:57 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
andrsamquestioner, А несуровое чтиво не посоветуете?) ну как раз Java Concurrency in Practice не так уж и суров, по сравнению с тем же Art Of Multiprocessor programming. Просто сама по себе тема сложная, а изложение в JCP очень даже хорошее, просто надо читать внимательно. Ну и да, вы правы, теория без практики быстро выветривается. Попробуйте написать какой-нибудь полезный пайплайн. Например, вытягивать какие-то веб-страницы(объявления продажи автомобилей и тп). Пайплайн будет состоять из шагов 1) вычитать страницу 2) отформатировать(извлечь нужное) 3) сохранить в базу данных. - все степы в отдельных потоках. Одни вычитывают, другие парсят, третьи сохраняют И чтоб все быстро четко и многопоточно:) Ну и корректно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 14:06 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
questionerДля понимания общих принципов мне эта статья более менее нравится: http://www.javaspecialist.ru/2011/06/java-memory-model.html на хабре много статеек, но да, есть ощущение, что по нитке собираешь понимание. Лучше, чем слушать Шипилёва , по-русски ничего нет. Редкое сочетание полного понимания вопроса и умения хорошо объяснять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 14:59 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
забыл никПайплайн конвеер по-русски? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 15:52 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
Alexey TominquestionerДля понимания общих принципов мне эта статья более менее нравится: http://www.javaspecialist.ru/2011/06/java-memory-model.html на хабре много статеек, но да, есть ощущение, что по нитке собираешь понимание. Лучше, чем слушать Шипилёва , по-русски ничего нет. Редкое сочетание полного понимания вопроса и умения хорошо объяснять. а у него есть где-то изложение от начала и до конца? я смотрел несколько видосов, мне кажется, что он просто рассказывает, что ему нравится, развеивает мифы и т.д. В каком порядке видосы смотреть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 16:33 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
Ну и кстати, господа, насчёт практики, кто нить может таки про код то пояснить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 16:34 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
questionerAlexey TominЛучше, чем слушать Шипилёва , по-русски ничего нет. Редкое сочетание полного понимания вопроса и умения хорошо объяснять. а у него есть где-то изложение от начала и до конца? я смотрел несколько видосов, мне кажется, что он просто рассказывает, что ему нравится, развеивает мифы и т.д. В каком порядке видосы смотреть? Вы издеваетесь? Я привёл ссылку, там идут два видео. Вот так и смотреть. Сначала первое, потом второе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 17:14 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
questionerНу и кстати, господа, насчёт практики, кто нить может таки про код то пояснить? С практикой, реально, плохо. Потому что если написать плохой код, то этого можно не заметить. При этом код может быть некорректным, на работать на компе разработчика. И даже на куче других. Шипилёв рассказывал, как ему в RedHat и Oracle давали ревьювить неправильный код. Вроде не дураки, а ошибки- прямо как в соседнем треде "должно работать". По-моему надо как раз для начала смотреть видео и решать по ходу задачки, плюс читать задачки отсюда . Когда все найденные примеры решаешь правильно- пора ехать на jpoint/joker/... и в кулуарах мучать того же Шипелёва- он готов побеседовать, если человек понимает базовые принципы (грубо- решает все вышеуказанные задачки). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 17:21 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
Alexey Tominquestionerпропущено... а у него есть где-то изложение от начала и до конца? я смотрел несколько видосов, мне кажется, что он просто рассказывает, что ему нравится, развеивает мифы и т.д. В каком порядке видосы смотреть? Вы издеваетесь? Я привёл ссылку, там идут два видео. Вот так и смотреть. Сначала первое, потом второе. Ок) первое отсмотрел. и кстати понимаю откуда у вас такая уверенность, что гарантий нет, что последующее после записи чтение может прочитать старое значение, но по-моему он там пытается нечто другое объяснить. К тому же в самом конце в примере он предлагает делать переменную volatile. В теории до примера он говорит, что Если мы увилим волатильную переменную измененной, то увидим и все, что было сделано перед ней, НО , судя по всему, подразумевается, что условием видимости будет то, что чтение произошло после записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 17:28 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
На вскидку: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 17:59 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
questioner НО , судя по всему, подразумевается, что условием видимости будет то, что чтение произошло после записи. Да. Вопрос, что есть сразу после записи . На следующий такт? Через 10 тактов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 18:00 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
Alexey TominquestionerНу и кстати, господа, насчёт практики, кто нить может таки про код то пояснить? С практикой, реально, плохо. Потому что если написать плохой код, то этого можно не заметить. При этом код может быть некорректным, на работать на компе разработчика. И даже на куче других. Шипилёв рассказывал, как ему в RedHat и Oracle давали ревьювить неправильный код. Вроде не дураки, а ошибки- прямо как в соседнем треде "должно работать". По-моему надо как раз для начала смотреть видео и решать по ходу задачки, плюс читать задачки отсюда . Когда все найденные примеры решаешь правильно- пора ехать на jpoint/joker/... и в кулуарах мучать того же Шипелёва- он готов побеседовать, если человек понимает базовые принципы (грубо- решает все вышеуказанные задачки). Так мой вопрос о том гарантирован ли какой-либо вывод в представленном коде? Если Вы пишете многопоточный код, это обычная ситуация - code review. Что неуместного в этом вопросе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 18:18 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
Alexey Tominquestioner НО , судя по всему, подразумевается, что условием видимости будет то, что чтение произошло после записи. Да. Вопрос, что есть сразу после записи . На следующий такт? Через 10 тактов? Чего придумывать то, если чтение началось в момент, когда запись завершилась, то тогда и видно будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 18:41 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
andrsamЗдравствуйте! В требованиях к вакансиям среди прочих указано знание многопоточности. Простое изучение литературы без практики не даст результата. Отсюда вопрос - не посоветуете какие-нибудь задачи, решая которую можно изучить данную предметную область? Меня как то на интервью спросили написать програмку по "Спящему Парикмахеру" Дейкстры. Я решил не заморачиваться и написал через очередь с блокировкой. Потом решил опубликовать решение. https://vyatkins.wordpress.com/2013/12/21/sleeping-barber-problem/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 19:02 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
Alexey TominquestionerНу и кстати, господа, насчёт практики, кто нить может таки про код то пояснить? С практикой, реально, плохо. Потому что если написать плохой код, то этого можно не заметить. При этом код может быть некорректным, на работать на компе разработчика. И даже на куче других. Шипилёв рассказывал, как ему в RedHat и Oracle давали ревьювить неправильный код. Вроде не дураки, а ошибки- прямо как в соседнем треде "должно работать". По-моему надо как раз для начала смотреть видео и решать по ходу задачки, плюс читать задачки отсюда . Когда все найденные примеры решаешь правильно- пора ехать на jpoint/joker/... и в кулуарах мучать того же Шипелёва- он готов побеседовать, если человек понимает базовые принципы (грубо- решает все вышеуказанные задачки). Да там в основном задротские вопросы, в жизни этого можно избежать обычные бы все для начала устаканить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 19:09 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
SergunkaМеня как то на интервью спросили написать програмку по "Спящему Парикмахеру" Дейкстры. Я решил не заморачиваться и написал через очередь с блокировкой. Потом решил опубликовать решение. https://vyatkins.wordpress.com/2013/12/21/sleeping-barber-problem/ Твое игнорирование InterrupedException вызвало-бы вопросы на собеседовании. По крайней мере надо-бы бы в каментах написать почему игнорим и почему это ни к чему плохому не приведет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 00:56 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
no56892На вскидку: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Код: java 1. понятно, что это final поле и то, что тут установлено будет видно, если мы получили ссылку на instance != null а вот Код: java 1. как к этому относиться? оно к тому же установлено после присвоения ссылки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 10:00 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
no56892, или магия freeze action всё сделает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 10:40 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
questioner, Там вроде если хотя бы одно поле final, то в конец конструктора автоматически добавляется шняга подобная записи в волатайл (мембар или хз как правильно, сброс в оперативку сразу кароче условно), за исключением, что запись в волатайл создает hb, а final "ограниченное" hb, т.е. другие потоки увидят все, что произошло в конструкторе, но не гарантированно увидят то, что было до создания объекта. https://shipilev.net/blog/2014/all-fields-are-final/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 20:45 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
Кароче: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Правдо следует сказать, что в JLS есть пример: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Т.е. это гарантии JVM, однако в предыдущем посте я писал про то, что если хотя бы одно поле final - то вообще все действия в конструкторе видны. Это я взял вот отсюда: https://shipilev.net/blog/2014/safe-public-construction/#_safe_publication Т.е. это по факту так, но в JMM не гарантируется, вывод - final поля видны после инициализации, а также видны все действия с final полями в конструкторе если строго по JMM и не залипать на текущее положение дел. Вроде все :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 21:21 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
Кстати: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. кто там говорил про volatile?))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 22:06 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
no56892Кстати: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. кто там говорил про volatile?))) Беру свои слова обратно, это не работает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 22:56 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
no56892, Это не работает т.к. while(!flag) {} тупо не перечитывает из памяти (куда дб попасть т.к. final в конструкторе). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 23:00 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
questionerКстати предлагаю разобрать, кто чувствует силы в себе, по полочкам пример кода: ... Ожидаю, что сейчас посоветуют читать Concurrency in practise. Но для начала это слишком суровое чтиво. Нет не посоветую. Вместо этого вот вам всем неуверенным в себе первое, что вы должны знать о многопоточности: информация между потоками не передается через голые переменные, как реализовано в приведенном вами примере. Необходимо использовать связующий объект. В 90% подойдет любая реализация интерфейса BlockingQueue. Производитель вызывает метод put(), а потребитель - метод take(). В вашем примере, когда надо передать только одно значение, лучшим вариантом будет какая-либо реализация интерфейса Future, например CompletableFuture, так как дает возможность передать не только значение при удачном исходе, но и исключение при неудачном. Второе: прочитайте бегло документацию, чтобы знать, какие связующие объекты уже реализованы. Это почти все, что нужно знать рядовому программисту о многопоточности. Третье: Concurrency in practiсe и все прочие книги, которые описывают, как использовать synchronized/wait/notify/ReentrantLock нужны только затем, чтобы реализовать специфический связующий объект в случае, если существующие реализации чем-то не устраивают. И прежде чем читать такие книги, лучшая учеба - читать исходники уже реализованных связующих объектов. Причем исходники java.util.concurrent - не лучший источник вдохновения: они вылизаны с точки зрения производительности, но авторы принесли в жертву понятность и убедительность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 01:37 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
questionerНу и кстати, господа, насчёт практики, кто нить может таки про код то пояснить? Если код будет сразу нативным. Не будет вызова GC, перелета потока с одного проца на другой и пр. неожиданных событий по сбросу кеша, то побудительных причин , для того, чтоб instance стал отличным от null в основном потоке, вроде бы и может не оказаться. questionerНО, судя по всему, подразумевается, что условием видимости будет то, что чтение произошло после записи. Оно самое, а в дополнение JMM требует от JVM, чтобы та обеспечила видимость и всего остального, что было до того, раз это действие видимо. P.S. System.out.print хреновое средство для твоей задачи - оно само неявно ставит барьеры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 09:50 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
no56892Т.е. это по факту так, но в JMM не гарантируется, вывод - final поля видны после инициализации, а также видны все действия с final полями в конструкторе если строго по JMM и не залипать на текущее положение дел. Вроде все :). Немного уточню, процитировав комент, на который ссылается Алексей jdk // 1. The constructor wrote a final. The effects of all initializations // must be committed to memory before any code after the constructor // publishes the reference to the newly constructed object. Rather // than wait for the publication, we simply block the writes here. // Rather than put a barrier on only those writes which are required // to complete, we force all writes to complete. JMM требует создать барьер в момент когда инициализированы все final поля. Поскольку разбивать конструктор сильно влом, да и чревато, авторы OpenJDK несколько ужесточают подход создают его по окончании конструктора в данном случае. В принципе на других JVM (и в отдаленном будущем) это может быть и не так, но маловероятно ибо "А зачем?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 10:11 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
rfqВ 90% подойдет любая реализация интерфейса BlockingQueue. Производитель вызывает метод put(), а потребитель - метод take(). Хотелось бы посмотреть на реализацию Singletone через BlockingQueue, метод put() и метод take(). Начиная с безопасной публикации самого BlockingQueue таким образом, а не через голое final поле или еще как-нибудь так. Да и выстраивание потоков в очередь это порой приводит к "многопоточности", которая медленнее одного потока. P.S. Многопоточность IMHO следует начинать с осознания того, что она нужна только когда можно потоки развести между собой и как это делается. И почему обмен информацией между ними это всегда проблемка. А потом уж выбирать способ который эту проблемку решит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 10:23 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевquestionerНу и кстати, господа, насчёт практики, кто нить может таки про код то пояснить? Если код будет сразу нативным. Не будет вызова GC, перелета потока с одного проца на другой и пр. неожиданных событий по сбросу кеша, то побудительных причин , для того, чтоб instance стал отличным от null в основном потоке, вроде бы и может не оказаться. то есть точно вы не уверены? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 11:00 |
|
||
|
Изучение многопоточности в Java
|
|||
|---|---|---|---|
|
#18+
questioner, Так речь то про то, что гарантий нет, как в одну, так и в другую сторону (может увидит изменение, а может и нет). Ошибки в парралельной работе иногда выражаются в том, что код работает и на тестах и в жизни. А потом кто-то находит способ устроить гонку и списать деньги не со своего счета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 11:11 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2123187]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
163ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 487ms |

| 0 / 0 |
