Looking for java Keywords? Try Ask4Keywords

Java Language Как избежать необходимости понимать модель памяти


пример

Модель памяти трудно понять и ее трудно применить. Это полезно, если вам нужно рассуждать о правильности многопоточного кода, но вы не хотите, чтобы это объяснение для каждого многопоточного приложения, которое вы пишете.

Если вы принимаете следующие принципы при написании параллельного кода на Java, во многом вы можете избежать необходимости прибегать к случаям - до рассуждений.

  • По возможности используйте неизменяемые структуры данных. Правильно внедренный неизменяемый класс будет потокобезопасным и не будет вводить проблемы безопасности потоков при использовании его с другими классами.

  • Понимать и избегать «небезопасной публикации».

  • Используйте примитивные мьютексы или объекты Lock для синхронизации доступа к состоянию в изменяемых объектах, которые должны быть потокобезопасными 1 .

  • Используйте Executor / ExecutorService или платформу fork join, а не пытайтесь напрямую создавать потоки управления.

  • Используйте классы `java.util.concurrent, которые предоставляют расширенные блокировки, семафоры, защелки и барьеры, вместо прямого использования wait / notify / notifyAll.

  • Используйте версии java.util.concurrent карт, наборов, списков, очередей и требований, а не внешнюю синхронизацию неконкурентных коллекций.

Общий принцип - попытаться использовать встроенные библиотеки параллельного использования Java, а не «сворачивать свой собственный» параллелизм. Вы можете полагаться на их работу, если вы используете их правильно.


1 - Не все объекты должны быть потокобезопасными. Например, если объект или объекты ограничены потоком (т. Е. Доступен только для одного потока), то его безопасность потока не имеет отношения к делу.