В этой статье рассмотрим CountDownLatch. В отличие от CyclicBarrier, где все потоки равноправны и ожидают друг друга, с CountDownLatch потоки делятся на два типа — одни уменьшают значение CountDownLatch, а другие ждут, когда он станет равен 0, чтобы продолжиться.
Читать далее «CountDownLatch»
Core Java
Основы
- Класс в Java
- Модификаторы private, public, protected
- Передача параметров: по ссылке или значению?
- Оператор switch
- Лямбда-выражения в Java 8
- Default-метод
- Optional
Аннотации
- Обработка аннотаций уровня RUNTIME с помощью Java Reflection
- Инъекция зависимости с помощью Reflection
- Обработка аннотаций уровня SOURCE
- Модификация байт-кода на основе аннотаций (уровня CLASS)
Многопоточность
- Ключевое слово volatile
- Atomic classes
- CompletableFuture — руководство с примерами
- CyclicBarrier
- CountDownLatch
Коллекции
CyclicBarrier
Cyclicbarrier помогает наладить взаимодействие потоков.
Читать далее «CyclicBarrier»
Ключевое слово volatile
Изменение переменной, сделанное в одном потоке, не сразу видно другому потоку. Исправить это можно с помощью volatile — ключевого слова, которое ставится перед переменной. В отличие от слова synchronized, которое применимо для метода или для блока кода, слово volatile применимо только для переменной. volatile — это более слабый вариант синхронизации, который иногда бывает достаточным.
Читать далее «Ключевое слово volatile»
Atomic classes
AtomicInteger, AtomicLong и т.п. классы позволяют выполнять операции в многопоточной среде атомарно. Например, безопасно увеличивать счетчик.
Читать далее «Atomic classes»
@ComponentScan в @SpringBootApplication. Аннотация @Import
При запуске Spring-приложения пакеты сканируются. Из аннотированных с помощью @Component, @Service, @Repository и @Configuration клаccов создаются бины. В этой статье рассмотрим, как задаются пакеты и классы для сканирования.
Читать далее «@ComponentScan в @SpringBootApplication. Аннотация @Import»
Как в Java преобразовать List в массив, и наоборот
В этой статье рассмотрим, как преобразовать List в массив и наоборот: как преобразовать массив в List.
Читать далее «Как в Java преобразовать List в массив, и наоборот»
Передача параметров в Java: по значению или по ссылке?
В Java все параметры передаются по значению, хотя некоторые говорят, что, мол, объекты передаются по ссылке. Но это не так — сейчас объясню тонкость.
Читать далее «Передача параметров в Java: по значению или по ссылке?»
Лямбда-выражения в Java 8
В этой статье речь идет о лямбда-выражениях, функциональных интерфейсах. Подробно рассматривается синтаксис лямбда-выражений, а также приводятся стандартные функциональные интерфейсы из JDK.
Читать далее «Лямбда-выражения в Java 8»
Инъекция зависимости с помощью библиотеки Reflection
В этой статье мы реализуем шаблоны Dependency Injection и Inversion of Control — на этих шаблонах основана Spring Framework.
Читать далее «Инъекция зависимости с помощью библиотеки Reflection»
Аннотации в Java и их обработка в RUNTIME с помощью рефлексии
Аннотации — это своего рода маркеры, которые служат знаком либо компилятору, либо обработчику скомпилированных классов, либо самому приложению во время его выполнения — знаком что-то сделать. Для аннотаций всегда нужен обработчик, сами они ничего не делают.
Читать далее «Аннотации в Java и их обработка в RUNTIME с помощью рефлексии»