
Vyacheslav
17.06.2017
15:09:39
Тогда такой вопрос: как можно по хорошему этот момент обработать? Я хочу чтобы это логировалось в последнюю очередь
Сделать какую-то проверку на наличие запущенных потоков?

Daniel
17.06.2017
15:11:18
у тебя этот экзекьютор останавливаемый и выполнит роль семафора
логируй после

Google

Dmitriy
17.06.2017
16:33:43
Это же не "люди" с улицы были

Vyacheslav
17.06.2017
16:35:10
Может мне кто-нибудь пояснить как мы можем у Future забрать состояние для всех засабмиченных задач, даже если их там куча?

Daniel
17.06.2017
16:37:14
у фьючи никак, потому что это только одна задача

Vyacheslav
17.06.2017
16:37:51
А как это можно сделать тогда?

Daniel
17.06.2017
16:38:24
перефразируй для начала, я не въехал что нужно в итоге от кучи тасков

Vyacheslav
17.06.2017
16:42:16
Смотри, я сабмичу кучу заданий по обработке строк через ExecutorService. У меня есть второй метод: он принимает список строчек, которые вылетели с ошибкой в предыдущем коде. Что мне нужно - я хочу, чтобы этот второй метод дождался пока выполнятся куча заданий по обработке строк и только тогда начал выполняться.

Daniel
17.06.2017
16:43:30
давай на скалу перепишем, там это быстро делается из коробки ?

Берял
17.06.2017
16:44:06

Daniel
17.06.2017
16:44:58
можно опять же два варианта, с блокировкой на каком либо ресурсе (семафор поднять) или асинхронно полностью (как это в java уж не знаю)

Vyacheslav
17.06.2017
16:45:04

Daniel
17.06.2017
16:45:11
а вот да, третий вариант, однопоточно)

Vyacheslav
17.06.2017
16:45:39

Google

Nick
17.06.2017
16:46:37

Daniel
17.06.2017
16:47:00

Vyacheslav
17.06.2017
16:48:25
Пока у меня есть лист future, в который я кладу таски, которые сабмичу через экзекьютор. А вот чо дальш делать хз. Foreach забирать каждый элемент из листа? А чо с ним дальше делать?
Подтверди, Ник)
Это не вариант. Я не для этого свой парсер писал, чтоб забить почти в конце)

Daniel
17.06.2017
16:52:31
курсы почти всегда бесплатны, платные специализации и сертификаты

Vyacheslav
17.06.2017
16:53:41
Хм, видать давно я там не был

Maks
17.06.2017
16:53:51
Но конечно может это просто так для меня выпало

Nick
17.06.2017
16:54:27
Там ж профессор этот - поляк?

Daniel
17.06.2017
16:55:47

Nick
17.06.2017
16:56:51
Точно, он. Неее, я слушал и плакал)
Хотя лучше он, чем андрюша нж

Daniel
17.06.2017
16:57:17
там 2ой мужик смешной, как будто француз

Nick
17.06.2017
16:58:29
Может швейцарец? На самом деле курс этот ну слабоват

Daniel
17.06.2017
17:04:47
хардкора нет, но как элементарный ок


Ivan
17.06.2017
17:27:03
Господа, кто может мне прояснить почему блок finally выполняется в самом начале? https://image.prntscr.com/image/_gcXCvPXSSuiYca_a5K8Vg.png
Короче, уже сказали тебе, но на всякий случай повторим что происходит:
Ты что-то там инициализируешь, потом запускаешь АСИНХРОННО таски, они начинают выполняться в своём треде, но тред в котором ты их запускаешь продолжает выполняться дальше (на то оно и асинхронное выполнение. К.О.), а дальше у нас блок finally который должен быть выполнен при любом раскладе исполнения метода(по определению блока finally).
Что делать, куда бежать? Ну как минимум погуглить про средства синхронизации в java. Тут тебе нужно дождаться выполниния своих асинхронных тасков. Можно сделать вообще через fork-join-pull и не париться. Можно просто для каждой таски вызвать метод get() (тогда ты залочишься до выполнения всех задач) можно этот список опрашивать isFinish() и редьюсить значения по в одно и пока false показывать пользователю кукиш )

Google

Ivan
17.06.2017
17:27:31
В общем вариантов много. Основное - это интерфейс Future

Vyacheslav
17.06.2017
17:28:26
А есть что-то кроме доки и Гугла, что можно про это прочитать?
Пока я начал делать через while (count !=0), там через гет забираю таски и делаю count-1. Когда будет 0 запустится второй метод. Норм?

Ivan
17.06.2017
17:31:22
Ну у тебя же список есть и есть шикарные стримы
get - блокирует текущий тред до завершения таски
Так что если у тебя хотя бы по разу для каждой отработал гет, то значит всё завершилось

Vyacheslav
17.06.2017
17:33:58
Так, а как вообще бегает этот гет по списку? Один раз прошёл и всё или постоянно опрашивает?
Гет же должен тогда постоянно обновлять состояние списка

Daniel
17.06.2017
17:35:06
гет блочит фьючи до результата, по факту ты извращенно написал однопоточное решение

Alexander
17.06.2017
17:35:47
Проблема будет только, если кто-то не сделает декремент лэтчу
На этот случай можно тайм-аут сделать

Vyacheslav
17.06.2017
17:38:15
Нужно попить водички и почитать про потоки. А то сложно, етить

Alexander
17.06.2017
17:38:53
http://javarevisited.blogspot.co.uk/2012/07/countdownlatch-example-in-java.html?m=1
Вот простой пример

Vyacheslav
17.06.2017
17:41:09
Хм. Проблема в том, что про потоки я знаю только то, что вычитал/наработал за пару дней написания приложения. Пока не хватает знаний как работает конкретно работает семафор и прочие штуки
Но спасибо, буду осваивать

Alexander
17.06.2017
17:43:19
Concurrency in practice в руки. Там там как раз первые главы про примитивы синхронизации

Vyacheslav
17.06.2017
17:43:38
Оке

Alexander
17.06.2017
17:47:18
Посмотри еще ExecutorService::invokeAll

Google

Alexander
17.06.2017
17:47:37
Возможно, это то, что тебе нужно

Admin
ERROR: S client not available

Alexander
17.06.2017
17:47:48
И проще чем шареный счетчик

Vyacheslav
17.06.2017
17:52:38
Для того, чтобы его запустить, разве не надо как-то отдельно собирать таски?

Alexander
17.06.2017
18:05:27
Надо
Но если ты можешь их собрать, почему бы и нет

Vyacheslav
17.06.2017
18:19:49
Так если я их запускаю через submit, то invoke никак не использовать, нет?

Dmitriy
17.06.2017
18:22:15
Просто прочтите книгу, которую вам посоветовали и часть вопросов сразу отпадёт

Vyacheslav
17.06.2017
18:51:51

Roman
17.06.2017
18:52:38
А что за книга, если не секрет?
А, увидел. Спс)

Алексей
17.06.2017
18:59:53
где искать работу Spring+ORM/JDBC Angular/React разработчику?

Alex
17.06.2017
19:02:44
Ребят, в связи с закрытием сайта kenai, куда теперь ходить за недостающими либами?
Хотел потюнить jvm, выдало такое : Could not load hsdis-amd64.dylib; library not loadable; PrintAssembly is disabled
Пошел за ней в Kenai, а он закрыт

Алексей
17.06.2017
19:04:57

sss3 ?
17.06.2017
19:20:49

Алексей
17.06.2017
19:21:05

Vyacheslav
17.06.2017
20:28:27
Господа, подскажите ещё. Я вообще никак не понимаю из submit сделать invokeAll. Нашёл пример как должно выглядеть, но всё равно не получается.
http://programador.ru/invokeall/

Google

Vyacheslav
17.06.2017
20:28:49
Я не понимаю как 2 метода в сабмите заменить на 1 callable

Igor
17.06.2017
20:31:45

Vyacheslav
17.06.2017
20:33:32

Nick
17.06.2017
20:41:19
@shnapsx какая задача то?

Vyacheslav
17.06.2017
20:43:38
@shnapsx какая задача то?
Вот есть этот кусок кода в стриме. Нужно поменять его с instance.submit на instance.invokeAll. А чтоб внутри каллабл выпонялись методы download и countplus.
То-бишь, чтобы это выполнилось и только тогда поток убежал дальше

Снобяъ
17.06.2017
21:45:00
Есть чат линуксоидов?

Ilusha [←↓ ↑→]
17.06.2017
21:51:38

Maks
17.06.2017
22:10:21
pro.linux
Взамен старой доброй группы pro.linux, с которой и началась вся серия групп pro.*, т.к. создатель её покинул нас
Invite: https://t.me/joinchat/Be4rsT7VI1LxrHaMR3pezQ

sss3 ?
17.06.2017
23:22:40