Java Learning
18.7K subscribers
1.62K photos
1 video
3 files
998 links
№ 5079899194

Обучающий канал по Java

Ссылка для друга - https://t.iss.one/+ZEYYht6-46w5MDM6

По всем вопросам @mascarov_valentin

Реклама на бирже - https://telega.in/c/Java_per_month
Download Telegram
Параллельные аккумуляторы

Кроме блокировок, Java Concurrent может предложить еще одну интересную функцию - параллельные аккумуляторы. LongAccumulator обновляет значение, используя предоставленную функцию. Это позволяет нам реализовать алгоритм без блокировок в ряде сценариев. Обычно это предпочтительнее чем AtomicLong, когда несколько потоков обновляют общее значение.

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

Теперь давайте создадим LongAccumulator с начальным значением 10000а затем вызовем метод accumulate() из нескольких потоков.

#для_продвинутых
👍81
Каким будет вывод этого кода?
Anonymous Quiz
15%
true true
6%
false false
10%
true false
63%
false true
5%
Узнать ответ
👍18😢2🤔1
Реверс массива

Реверс массива в Java означает изменение порядка элементов массива на противоположный. То есть, элементы, которые изначально были в начале массива, становятся в конце, и наоборот.

Реверс массива может быть полезным во многих ситуациях программирования. Например, это может потребоваться для изменения порядка элементов перед их обработкой или выводом, или для выполнения действий, которые требуют доступа к элементам массива в обратном порядке.

#для_продвинутых
👍12
Сеттеры

В Java сеттеры (setters) являются методами класса, которые используются для установки значений приватных переменных (полей) класса. Они обеспечивают механизм инкапсуляции данных, позволяя контролировать доступ к полям класса и обеспечивать безопасность данных.

#для_начинающих
13👍3😢1
Создание подклассов исключений

Для того чтобы создать класс собственного исключения, достаточно определить его как производный от класса Exception.

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

Зачастую указывать описание исключения непосредственно при его создании очень удобно, но иногда для этого лучше переопределить метод toString().

#для_продвинутых
6👍3😱3
Параллельная редукция

Параллельная редукция в Java — это процесс сокращения (редукции) коллекции элементов с использованием параллельных вычислений. В Java для этого можно использовать параллельные потоки и функциональные интерфейсы, такие как reduce(), collect() и stream().

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

#для_продвинутых
👍131
Буферизованные потоки

Буферизованные потоки — это классы, которые обеспечивают буферизацию потоковых данных, что может улучшить производительность при чтении и записи больших объемов данных.

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

#для_продвинутых
👍17
StringBuilder

StringBuilder - это класс в Java, который представляет собой изменяемую последовательность символов. В отличие от класса String, объекты StringBuilder можно изменять, добавлять или удалять символы из строки без создания нового объекта.

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

#для_начинающих
👍16🤔3
Условия в блокировках

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

Условия могут использоваться для предотвращения "голодания" некоторых потоков или для более эффективного управления блокировками.

#для_продвинутых
👍71
Взаимная блокировка потоков

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

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

#для_продвинутых
👍14
В Java 21 собираются реализовать сопоставление с образцом – так, глядишь, я снова на этот язык перейду

Выпуск Java 21 состоялся 19 сентября 2023 года. В этой версии поддерживаются паттерны записи в switch-блоках и выражениях. Такой синтаксис выглядит монументально (как минимум, по меркам Java).

Смотреть статью
👍146
Ссылочные типы

В Java все типы данных делятся на две категории: примитивные типы и ссылочные типы. Ссылочные типы данных представляют собой объекты, которые содержат данные и методы для работы с ними. В отличие от примитивных типов, переменные ссылочных типов хранят ссылку на объект, а не его значение.

#для_начинающих
👍24
Сортировка Шелла

Если простыми словами, то сортировка Шелла это алгоритм сортировки массива, который улучшает производительность сортировки вставками.

Он основан на сравнении элементов, находящихся не только рядом, но и на определенном расстоянии друг от друга.

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

#для_продвинутых
👍13
Переопределение методов в классах наследниках

В Java можно переопределить методы в классах-наследниках с помощью ключевого слова @Override. Переопределение метода позволяет изменить его реализацию в подклассе, сохраняя при этом сигнатуру (имя, типы параметров и возвращаемое значение) метода из суперкласса.

Обратите внимание на использование аннотации @Override перед переопределенным методом в классе Subclass. Это помогает компилятору обнаружить ошибки, если вы случайно ошиблись в сигнатуре метода или не переопределили метод правильно.

#для_продвинутых
👍17
Что выведет следующий код?
Anonymous Quiz
22%
000111222
5%
010120212
59%
Все варианты правильные
14%
012012012
👍21
NavigableSet

NavigableSet — это расширенный интерфейс Set, который позволяет работать с элементами множества в отсортированном порядке и выполнять различные операции поиска и навигации. NavigableSet в Java предоставляет ряд методов для работы с элементами в порядке возрастания или убывания.

#для_продвинутых
👍10
Records

Records — это новый тип данных, добавленный в Java 14, который позволяет определить класс с набором свойств, аналогичных полям класса, но неизменяемых и доступных только для чтения. Они предоставляют удобный способ объявления простых неизменяемых объектов с сокращенным синтаксисом.

#для_продвинутых
👍211
Друзья, мы планируем в историях публиковать разбор задачек с собеседований с подробными пояснениями от Senior Java разработчика из Яндекса.

Если у вас есть Premium и вам интересен данный формат, то прошу проголосовать по ссылке ниже.

➡️ https://t.iss.one/Java_per_month?boost
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32🔥21
CyclicBarrier

CyclicBarrier (циклический барьер) — это один из механизмов синхронизации в языке программирования Java, предоставляемый пакетом java.util.concurrent. Он позволяет группе потоков синхронизироваться на определенной точке выполнения, после чего они могут продолжить выполнение параллельно.

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

#для_продвинутых
👍132