Перейти к основному содержимому

· 6 мин. чтения

1. Обзор

В Java 8 лямбда-выражения стали облегчать функциональное программирование, предоставляя лаконичный способ выражения поведения. Однако функциональные интерфейсы , предоставляемые JDK, не очень хорошо справляются с исключениями, и код становится многословным и громоздким, когда дело доходит до их обработки.

В этой статье мы рассмотрим некоторые способы обработки исключений при написании лямбда-выражений.

2. Обработка непроверенных исключений

Во-первых, давайте разберемся с проблемой на примере.

· 5 мин. чтения

1. Обзор

В этой статье мы рассмотрим две конструкции из пакета java.util.concurrent : LongAdder и LongAccumulator .

Оба созданы, чтобы быть очень эффективными в многопоточной среде, и оба используют очень умную тактику, чтобы быть без блокировок и при этом оставаться потокобезопасными.

2. Длинный сумматор

Давайте рассмотрим некоторую логику, которая очень часто увеличивает некоторые значения, где использование AtomicLong может быть узким местом. При этом используется операция сравнения и подкачки, которая в условиях сильной конкуренции может привести к большому количеству потраченных впустую циклов ЦП.

· 1 мин. чтения

1. Обзор

Сила числа означает, сколько раз использовать число при умножении. Это можно легко рассчитать на Java.

2. Пример Math.pow

Прежде чем рассматривать пример, давайте посмотрим на сигнатуру метода:

public double pow(double a, double b)

· 4 мин. чтения

1. Обзор

В этой быстрой статье мы рассмотрим фундаментальный класс в Java — StringTokenizer .

2. Строковый токенизатор

Класс StringTokenizer помогает нам разделить строки на несколько токенов.

StreamTokenizer предоставляет аналогичные функции, но метод токенизации намного проще, чем тот, который используется классом StreamTokenizer . Методы StringTokenizer не различают идентификаторы, числа и строки в кавычках, а также не распознают и не пропускают комментарии.

· 4 мин. чтения

1. Обзор

В этой статье мы рассмотрим SynchronousQueue из пакета java.util.concurrent .

Проще говоря, эта реализация позволяет нам обмениваться информацией между потоками потокобезопасным способом.

2. Обзор API

SynchronousQueue поддерживает только две операции: take() и put(), и обе они блокируют .

· 6 мин. чтения

1. Обзор

В этой статье мы рассмотрим конструкцию TransferQueue из стандартного пакета java.util.concurrent .

Проще говоря, эта очередь позволяет нам создавать программы в соответствии с шаблоном производитель-потребитель и координировать передачу сообщений от производителей к потребителям.

Реализация на самом деле похожа на BlockingQueue , но дает нам новую возможность реализовать форму обратного давления. Это означает, что когда производитель отправляет сообщение потребителю с помощью метода transfer() , производитель будет оставаться заблокированным до тех пор, пока сообщение не будет использовано.

2. Один производитель — ноль потребителей

· 3 мин. чтения

1. Обзор

В Java 8 были добавлены коллекторы , которые помогали накапливать входные элементы в изменяемые контейнеры, такие как Map , List и Set .

В этой статье мы рассмотрим два новых сборщика, добавленных в Java 9: Collectors.filtering и Collectors.flatMapping , которые используются в сочетании с Collectors.grouping , предоставляя интеллектуальные коллекции элементов.

2. Фильтрующий коллектор

Collectors.filtering похож на Stream filter() ; он используется для фильтрации элементов ввода, но используется для разных сценариев. Фильтр Stream используется в цепочке потоков, тогда как фильтрация это Collector , который был разработан для использования вместе с groupingBy . ``

· 7 мин. чтения

1. Обзор

В этой статье показано, как обрабатывать JSON, используя только ядро Java EE, без использования сторонних зависимостей, таких как Jersey или Jackson. Почти все, что мы будем использовать, предоставляется пакетом javax.json .

2. Запись объекта в строку JSON

Преобразование объекта Java в строку JSON очень просто. Предположим, у нас есть простой класс Person :

public class Person {
private String firstName;
private String lastName;
private Date birthdate;

// getters and setters
}

· 3 мин. чтения

1. Обзор

С годами производительность систем, которые мы используем, увеличилась в геометрической прогрессии. Следовательно, количество потоков, которые поддерживает виртуальная машина Java, также увеличилось.

Но сколько мы на самом деле можем создать? Ответ не является точным числом, потому что оно зависит от множества факторов.

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

2. Память стека

· 5 мин. чтения

1. Введение

В этой статье мы реализуем пользовательскую аннотацию AOP, используя поддержку AOP в Spring.

Во-первых, мы дадим общий обзор АОП, объяснив, что это такое и его преимущества. После этого мы шаг за шагом будем реализовывать нашу аннотацию, постепенно создавая более глубокое понимание концепций АОП по мере продвижения.

Результатом станет лучшее понимание АОП и возможность создавать собственные аннотации Spring в будущем.

2. Что такое аннотация АОП?