Идентификатор канала: 68536784762286
🌍 Открытый канал
| Канал | Публикаций | Подписчиков | Последний пост |
|---|---|---|---|
|
|
6 | 1372 | 02.04.2026 |
Нет данных о рекламе
Загрузка данных...
| Размещенный пост | Текст публиакции | Рекламирующий канал | Просмотры | Просмотры 24 ч | Прирост подписчиков |
|---|
Загрузка данных...
| Размещенный пост | Текст публикации | Рекламируемый канал | Просмотры | Просмотры 24 ч | Прирост подписчиков |
|---|
| Дата и время публикации | Текст публикации | Рекламируемый канал | Динамика просмотров | Всего просмотров |
|---|---|---|---|---|
| 2026-04-02 20:20:00 | Что такое и как создать daemon thread? Демон в широком значении – фоновая программа. В Java потоки-демоны имеют схожий смысл: это потоки для фоновых действий по обслуживанию основных потоков. Потоки не-демоны называются пользовательскими (user thread). Тред создается демоном, если его родитель демон. Свойство Java-треда isDaemon можно переключать в любой момент до старта потока. По сравнению с пользовательскими потоками демоны имеют меньший приоритет выполнения. Когда все пользовательские треды завершились, JVM завершает работу. Демоны не выполняют самостоятельных задач, поэтому не препятствуют остановке, программа завершается не дожидаясь окончания их работы. Daemon thread может быть полезен для таких действий, как инвалидация кэша, периодическая актуализация значений из внешних источников, освобождение неиспользуемых пользовательских ресурсов. Что такое и как … |
|
|
130 |
| 2026-04-02 13:02:35 | Как устроены атомики? Начнем с того, что такое атомики и зачем нужны. Atomic* – семейство классов из java.util.concurrent. Они предоставляют набор атомарных операций для соответствующих типов. Например с помощью методов getAndIncrement/incrementAndGet класса AtomicInteger можно делать неатомарный в обычных условиях инкремент (i++). Условно можно разделить подходы реализации большинства atomic-методов на две группы: compare-and-set и set-and-get. Методы категории compare-and-set принимают старое значение и новое. Если переданное старое значение совпало с текущим, устанавливается новое. Обычно делегируют вызов в методы класса Unsafe, которые заменяются нативными реализациями виртуальной машины. Виртуальная машина в большинстве случаев использует атомарную операцию процессора compare-and-swap (CAS). Поэтому атомики обычно более эффективны чем стандартная дорогостоящая блокировка. В случае set-and-get старое значение неизвестно. Поэтому нужен небольшой трюк: программа сначала считывает текущее значение, а затем записывает новое, тоже с помощью CAS, потому что запись могла успеть поменяться даже за этот шаг. Эта попытка чтения+записи повторяется в цикле, пока старое значение не совпадет и переменная не будет успешно записана. Этот трюк называется double-checked или optimistic locking, и может быть использован и в пользовательском коде с любым способом синхронизации. Оптимистичность заключается в том, что мы надеемся что состояния гонки нет, прибегая к синхронизации только если гонка всё же случилась. Реализация оптимистичной блокировки может быть дана как отдельная задача. Как устроены ато… |
|
|
173 |
| 2026-03-31 14:27:16 | Как получить гарантированный дедлок? Сначала поговорим о том, что это такое. Deadlock – это взаимная блокировка, ситуация, когда два или более потока «наступают друг-другу на хвост» – зависают в вечном ожидании ресурсов, захваченных друг другом. Livelock – похожая проблема, с тем лишь отличием, что потоки не останавливаются, а вместо этого зацикливаются, выполняя одни и те же бесполезные действия, ходят по кругу. Стандартный подход к обеспечению гарантии защиты от дедлока – установка строгого порядка взятия блокировок. Если для мониторов A и B соблюдается всеобщий порядок захвата AB (и соответственно отпускания BA), то ни с одним потоком не случится попасть на ожидание B, успешно при этом захватив A. Из этого можно догадаться, простой способ гарантировать возможность дедлока – явно нарушить это условие. Нарушение условия даст дедлок «скорее всего когда-нибудь». Чтобы получить его точно и с первого раза, нужно гарантировать, что оба потока окажутся на этапе между захватами одного и другого ресурса в одно время. Это можно сделать множеством способов, в примере ниже использован CyclicBarrier. Как получить гар… |
|
|
298 |
| 2026-03-30 18:37:38 | Безопасная загрузка ресурсов в Java Хитрый совет по Java: используй скрытую возможность ClassLoader для безопасной подгрузки конфигураций и плагинов. Вместо чтения файлов напрямую через File, загружай ресурсы из classpath — так ты избежишь проблем с путями, правами и разными окружениями. import java.io.*; import java.nio.charset.*; public class ConfigLoader { public static String load(String name) throws Exception { try (InputStream in = ConfigLoader.class.getClassLoader().getResourceAsStream(name)) { if (in == null) return null; return new String(in.readAllBytes(), StandardCharsets.UTF_8); } } public static void main(String[] args) throws Exception { System.out.println(load("config/app.conf")); } } Безопасная загру… |
|
|
530 |
| 2026-03-30 09:55:07 | Что такое synchronized? Можно применять как модификатор метода, и как самостоятельный оператор с блоком кода. Выполняет код при захваченном мониторе объекта. В виде оператора объект указывается явно. В виде модификатора нестатического метода используется this, статического – .class текущего класса. Один из основных инструментов обеспечения потокобезопасности. Одновременно выполняется не более одного блока synchronized на одном и том же объекте. Такая блокировка называется intrinsic lock или monitor lock, подробно рассматривается в Java Concurrency in Practice 2.3.1. Блок synchronized также необходим для использования методов wait, notify, notifyAll. Что такое synchr… |
|
|
293 |
| 2026-03-29 13:15:01 | Чек-лист по Spring Boot профилям Чтобы не путаться в окружениях и не тащить dev в прод 🚨 — держите компактный список best practices. Карточка для сохранения👆🏻 Чек-лист по Spri… |
|
|
742 |
Загрузка данных...
| Время | Контент | Подписчиков | Кто ссылался | Просмотры | Просмотры 24 ч |
|---|