
Rikland
23.07.2018
19:52:23

Alpha
23.07.2018
19:52:43

guga
23.07.2018
19:53:46
ладно, давай подвязывать с флудом, а то прийдет Дима и отправит нас во @flood

Rikland
23.07.2018
19:54:04

Google

Igor
23.07.2018
19:54:06

Alpha
23.07.2018
19:54:45
или я
Так можно лампово перенести бсуждение туда :3

Baruch
23.07.2018
19:56:19

Rikland
23.07.2018
20:02:44

Митко Соловец?
23.07.2018
20:02:56
отставить флуд

Oleg
23.07.2018
20:11:51
хорошо.

Quantum Harmonizer
23.07.2018
20:44:56
Ребят, я правильно понимаю, что если в классе есть final-поля, то в конце конструктора происходит безопасная публикация, т. е. другие треды не увидят полусконструированный объект?

Dmitrii
23.07.2018
20:45:52

elefus
23.07.2018
20:45:57
если this не утечет раньше выхода из конструктора - значения final полей будут гарантированно видны всем потокам, получившим ссылку после выхода из конструктора

Quantum Harmonizer
23.07.2018
20:46:07

elefus
23.07.2018
20:46:46
если final-поля будут ссылочного типа - то их состояние гарантированно будет столь же актуально как и само final-поле

Google

Quantum Harmonizer
23.07.2018
20:47:16

elefus
23.07.2018
20:47:34
не, примитивы то понятно что будут видны гарантированно
просто если ты напишешь код
private final int[] arr;
arr = new int[2];
arr[0] = 1;
arr[1] = 2;

Dmitrii
23.07.2018
20:48:16

Quantum Harmonizer
23.07.2018
20:48:29

elefus
23.07.2018
20:48:30
то потоки снаружи гарантированно увидят arr != null, но могут прочитать arr[0] == 0
а вот arr = new int[] {1, 2};
даст ожидаемое поведение arr[0] == 1, arr[1] == 2

Quantum Harmonizer
23.07.2018
20:49:29

elefus
23.07.2018
20:50:47
при инициализации филда, в блоке инициализации или в конструкторе

Quantum Harmonizer
23.07.2018
20:52:21

elefus
23.07.2018
20:52:40
нет же оО

Marat
23.07.2018
20:53:02

elefus
23.07.2018
20:53:06
в момент присвоения ссылки final массив в этом случае содержит значения [0, 0]
а потом ты их изменяешь на [1, 2]

Quantum Harmonizer
23.07.2018
20:53:30

elefus
23.07.2018
20:53:45
а JMM гарантирует что значения будут гарантированно свежими только относительно момента записи, но не выхода из конструктора

Marat
23.07.2018
20:53:51
Ага, new int[size] выделяет память в куче и принудительно обнуляет элементы

Quantum Harmonizer
23.07.2018
20:54:59

elefus
23.07.2018
20:58:16
Там нет хэпэнс-бефор
Запись значения в final-поле (и, если это поле — ссылка, то ещё и всех переменных, достижимых из этого поля (dereference-chain)) при конструировании объекта happens-before запись этого объекта в какую-либо переменную, происходящая вне этого конструктора.

Dmitrii
23.07.2018
20:58:45

Google

elefus
23.07.2018
20:58:51
прошу прощения, не понял

Dmitrii
23.07.2018
20:59:05
Для них нет)
Но если инициализация не файнал поля само hb инициализации final (program order из JMM) то тогда hb.
Я это имел ввиду)

elefus
23.07.2018
21:04:44
а вот сейчас я не согласен (или опять неправильно понял)
Foo {
private int val;
private final int val2;
Foo() {
val = 42;
val2 = 777;
}
}
т.е. если какой-то поток получит ссылку на корректно сконструированный объект - он должен увидеть там значение 777 и 42 потому что запись в val является pаньше записи в val2, исходя из program order (и следовательно happens before)?

Oleksandr
23.07.2018
21:06:11

Quantum Harmonizer
23.07.2018
21:07:06

elefus
23.07.2018
21:09:08
но это, к сожалению, уже неправда: hb для записи final-полей является таковым только по отношению к другим записям в final-поля, но не для остальных операций

Quantum Harmonizer
23.07.2018
21:10:01

elefus
23.07.2018
21:10:45
насколько мне известно, JMM такой гарантии не дает, пруфлинк:
https://dev.cheremin.info/2011/12/final.html

Oleksandr
23.07.2018
21:11:49

Quantum Harmonizer
23.07.2018
21:14:23

Nikolay
23.07.2018
21:14:48

Dmitrii
23.07.2018
21:19:06

Quantum Harmonizer
23.07.2018
21:19:18
> то определение позволяет проводить ребра HB только от таких записей, которые а) происходят до завершения конструктора б) результаты которых видны по цепочке ссылок начиная с final-поля, инициализированного в этом конструкторе.
звучит так, будто можно мутировать массив, присвоенный в final-поле, до заморозки

elefus
23.07.2018
21:19:33
верно

Admin
ERROR: S client not available

Dmitrii
23.07.2018
21:22:26
верно
Почему? Заморозка файнал поля после выхода из конструктора. Если мы читаем не файнал после фриза это не даёт гарантии на то что у нас чтение не файнал и фриз memory chained... ?

Quantum Harmonizer
23.07.2018
21:22:57

Dmitrii
23.07.2018
21:23:15

Google

elefus
23.07.2018
21:30:21

Egor
23.07.2018
21:53:21
О, китайцы атакуют

O
23.07.2018
23:57:45
Пора капчу вводить

Ruslan
24.07.2018
02:12:35
/stat@combot

Combot
24.07.2018
02:12:35
combot.org/c/-1001043090457

Ruslan
24.07.2018
02:26:18
Что лучше использовать сокеты или нио?
Задача такая ,написать аукцион.
Сервер берёт из базы лоты и кидает клиентам которые подключенные или подключились. Клиенты торгуются и пишут свою цену к определённому лоту. Предположим клиентов может быть 1000+
Реализация в консоле

Vik
24.07.2018
03:19:00
писать сокетный сервер с нуля хлопотное дело. если это не лаба или курсач (хотя netty там тоже потрахаться придется)

Ruslan
24.07.2018
03:20:35

Vik
24.07.2018
03:24:10
тут как обычно, шашечки или ехать. думаю что на netty можно сговнякать быстро. а почему вообще сокетный сервер?
почему не http/wesocket или там http2/grpc ?

Ruslan
24.07.2018
03:26:06
Это задания типа тестового. А через что его реализовать вот и думаю. По нетти мало инфы ,в вот по нио или сокеты полно

Vik
24.07.2018
03:26:31
а на чем они в конторе пишут?

Ruslan
24.07.2018
03:27:21
ХЗ на чём. хотят посмотреть реализацию

Vik
24.07.2018
03:30:22
я вам оставлю книжечку почитать, вы только потом верните

Ruslan
24.07.2018
03:30:34
Спасибо большое

Vik
24.07.2018
03:30:46
ну и собствено никому не раздавайте ?

Google

Ruslan
24.07.2018
03:31:11
Да
?

Vik
24.07.2018
03:32:40
если задание просто слабать аукцион - я бы на вебсокетаслабал http://enterprisewebbook.com/ch8_websockets.html#_adding-an-auction-to-save-the-child

Ruslan
24.07.2018
03:33:43
Веб в данной ситуации мимо