История изменений
Исправление
vertexua,
(текущая версия)
:
1) В Java очень строго и детально описаная модель памяти, работающая на любом железе одинаково. По крайней мере согласно правилам в тех местах где даются гарантии
2) Обычно треды используют где уверены что необходима постоянная работа этого треда. Но в 90% случаях все думают в терминах выполнения задач (task) паралельно. И запускают не треды, а просто отправляют Runnable или лямбду в ExecutorService. Это быстрее, дешевле, управляемее и короче
3) В Java очень много готовых примитивов, много из них lock-free. Лучше поискать готовую concurrent lock free структуру данных, чем lock с обычным Map. Лучше использовать готовые atomics или даже LongAdder, чем городить свой велосипед.
4) Для многих сценариев можно применить Fork-Join Pool - более умная абстракция для параллелизма, умеет предотвращать всякие голодания потоков, когда одна задача вроде-как блокирующе ждет другую
Исправление
vertexua,
:
1) В Java очень строго и детально описаная модель памяти, работающая на любом железе одинаково. По крайней мере согласно правилам в тех местах где даются гарантии
2) Обычно треды используют где уверены что необходима постоянная работа этого треда. Но в 90% случаях все думают в терминах выполнения задач (task) паралельно. И запускают не треды, а просто отправляют Runnable или лямбду в ExecutorService. Это быстрее, дешевле и короче
3) В Java очень много готовых примитивов, много из них lock-free. Лучше поискать готовую concurrent lock free структуру данных, чем lock с обычным Map. Лучше использовать готовые atomics или даже LongAdder, чем городить свой велосипед.
4) Для многих сценариев можно применить Fork-Join Pool - более умная абстракция для параллелизма, умеет предотвращать всякие голодания потоков, когда одна задача вроде-как блокирующе ждет другую
Исправление
vertexua,
:
1) В Java очень строго и детально описаная модель памяти, работающая на любом железе одинаково. По крайней мере согласно правилам в тех местах где даются гарантии
2) Обычно треды используют где уверены что необходима постоянная работа этого треда. Но в 90% случаях все думают в терминах выполнения задач (task) паралельно. И запускают не треды, а просто отправляют Runnable или лямбду в ExecutorService.
3) В Java очень много готовых примитивов, много из них lock-free. Лучше поискать готовую concurrent lock free структуру данных, чем lock с обычным Map. Лучше использовать готовые atomics или даже LongAdder, чем городить свой велосипед.
4) Для многих сценариев можно применить Fork-Join Pool - более умная абстракция для параллелизма, умеет предотвращать всякие голодания потоков, когда одна задача вроде-как блокирующе ждет другую
Исходная версия
vertexua,
:
1) В Java очень строго и детально описаная модель памяти, работающая на любом железе одинаково. По крайней мере согласно правилам в тех местах где даются гарантии
2) Обычно треды используют где уверены что необходима постоянная работа этого треда. Но в 90% все думают в терминах выполнения задач (task) паралельно. И запускают не треды, а просто отправляют Runnable или лямбду в ExecutorService.
3) В Java очень много готовых примитивов, много из них lock-free. Лучше поискать готовую concurrent lock free структуру данных, чем lock с обычным Map. Лучше использовать готовые atomics или даже LongAdder, чем городить свой велосипед.
4) Для многих сценариев можно применить Fork-Join Pool - более умная абстракция для параллелизма, умеет предотвращать всякие голодания потоков, когда одна задача вроде-как блокирующе ждет другую