Easy Java
5.22K subscribers
311 photos
51 videos
463 links
Лучшие обучающие материалы и другие полезности для Java-разработчиков.

Сотрудничество: @heywan_n1

Цены: @heywan_media

Реклама на бирже: https://telega.in/c/+r8kkGSypBY84MmIy
Download Telegram
Please open Telegram to view this post
VIEW IN TELEGRAM
Ответ:
Anonymous Quiz
20%
1
27%
2
38%
3
14%
4
👩‍💻 Что такое PriorityBlockingQueue в Java и зачем она нужна?

PriorityBlockingQueue — это потокобезопасная очередь из java.util.concurrent, которая хранит элементы в отсортированном виде согласно их приоритету.

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


• Элементы автоматически сортируются
• Работает в многопоточном режиме
• Подходит для диспетчеризации задач по приоритету

⚡️ Пример:

import java.util.concurrent.PriorityBlockingQueue;

public class Main {
public static void main(String[] args) {
PriorityBlockingQueue<Integer> queue = new PriorityBlockingQueue<>();

queue.add(5);
queue.add(1);
queue.add(3);

while (!queue.isEmpty()) {
System.out.println(queue.poll()); // ➔ 1, 3, 5
}
}
}


👀 PriorityBlockingQueue особенно полезна, когда задачи имеют приоритеты — например, обработка срочных запросов, планирование задач или распределение ресурсов.


➡️ Easy Java | #Теория
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
📖 Как прокачать Java-приложения без миграции: Axiom JDK Express теперь на JVM 21

Мы знаем, как это бывает: проект на Java 8 живёт уже десятый год, релизить страшно, тестов мало, миграция пугает, а система критичная. И вот бизнес хочет «ускорить и не трогать».

Читать статью

➡️ Easy Java | #Статья
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😭19😁7
Вопрос с собеса

Что такое Future в Java и какие у него ограничения?

Пример🔽
import java.util.concurrent.*;

public class Main {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newSingleThreadExecutor();

Future<Integer> future = executor.submit(() -> {
Thread.sleep(1000);
return 42;
});

System.out.println("Результат: " + future.get()); // блокируется, пока не готово
executor.shutdown();
}
}


Ответ🔽
Future используется для представления результата асинхронной задачи. С его помощью можно запустить вычисление в отдельном потоке и позже получить результат через get().

Ограничения Future:
— нельзя легко комбинировать несколько задач
— нет встроенной обработки ошибок
— вызов get() блокирует поток, пока результат не готов

📌 Эти ограничения решаются с помощью CompletableFuture, который поддерживает цепочки и реактивный стиль.


➡️ Easy Java | #Собес
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Please open Telegram to view this post
VIEW IN TELEGRAM
Ответ:
Anonymous Quiz
6%
1
22%
2
60%
3
13%
4
👩‍💻 Что такое LinkedBlockingQueue в Java и зачем она нужна?

LinkedBlockingQueue — это потокобезопасная очередь из пакета java.util.concurrent, реализованная на связном списке.

Очередь блокирует операции добавления, если достигнут лимит, и операции извлечения, если очередь пуста. Это делает её удобным инструментом для синхронизации потоков.


• Поддерживает опциональный лимит размера
• Автоматически блокирует при пустой/полной очереди
• Идеальна для producer-consumer сценариев

⚡️ Пример:

import java.util.concurrent.*;

public class Main {
public static void main(String[] args) {
BlockingQueue<String> queue = new LinkedBlockingQueue<>(2);

Runnable producer = () -> {
try {
queue.put("task-1");
queue.put("task-2");
System.out.println("Продюсер добавил задачи");
} catch (InterruptedException e) {
e.printStackTrace();
}
};

Runnable consumer = () -> {
try {
System.out.println("Консьюмер обработал: " + queue.take());
System.out.println("Консьюмер обработал: " + queue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
};

new Thread(producer).start();
new Thread(consumer).start();
}
}


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


➡️ Easy Java | #Теория
Please open Telegram to view this post
VIEW IN TELEGRAM
4🤯1
📖 JEP 502 — Stable Values. Новая фича из Java 25

Stable Values - новая возможность, которая появится в Java 25 — следующем LTS-релизе, намеченном на сентябрь.

Читать статью

➡️ Easy Java | #Статья
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Ответ:
Anonymous Quiz
28%
1 1
42%
2 2
19%
2 1
11%
1 2
5
Please open Telegram to view this post
VIEW IN TELEGRAM
1😁295
Вопрос с собеса

Что такое Callable в Java и чем он отличается от Runnable?

Пример🔽
import java.util.concurrent.*;

public class Main {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newSingleThreadExecutor();

Callable<Integer> task = () -> {
Thread.sleep(500);
return 7 * 6;
};

Future<Integer> future = executor.submit(task);
System.out.println("Результат: " + future.get()); // ➔ 42

executor.shutdown();
}
}


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

Callable<V> — это интерфейс для задач, которые возвращают результат (V) и могут выбрасывать исключения.

📌 Основные отличия:
Runnable.run() → void, без checked-исключений
Callable.call() → V, может выбросить checked-исключения
— Callable всегда используется вместе с Future для получения результата


➡️ Easy Java | #Собес
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
Ответ:
Anonymous Quiz
51%
1
13%
2
20%
3
15%
4
5
👩‍💻 Что такое StampedLock в Java и зачем он нужен?

StampedLock — это продвинутый механизм синхронизации из пакета java.util.concurrent.locks, созданный как альтернатива ReentrantReadWriteLock.

Он предоставляет три режима блокировки:

• эксклюзивная (write lock)
• совместная (read lock)
• оптимистичная (optimistic read), которая не блокирует ресурс и подходит для случаев, где конфликты редки.

Вместо объектов-блокировок StampedLock работает с "штампами" (stamp) — уникальными long-значениями, которые нужно передавать при освобождении блокировки


• Позволяет снизить блокировки при частых чтениях
• Поддерживает неблокирующие "оптимистичные" чтения
• Эффективнее для высоконагруженных многопоточных приложений

⚡️ Пример:

import java.util.concurrent.locks.StampedLock;

public class Main {
private static final StampedLock lock = new StampedLock();
private static int value = 0;

public static void main(String[] args) {
// Запись
long stamp = lock.writeLock();
try {
value = 42;
} finally {
lock.unlockWrite(stamp);
}

// Оптимистичное чтение
long optStamp = lock.tryOptimisticRead();
int readValue = value;
if (!lock.validate(optStamp)) {
long readStamp = lock.readLock();
try {
readValue = value;
} finally {
lock.unlockRead(readStamp);
}
}
System.out.println("Прочитано: " + readValue);
}
}


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


➡️ Easy Java | #Теория
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
📖 Обмен событиями распределённого приложения на Java

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

Это доставка событий через БД, в которой хранится состояние распределённого приложения.


Читать статью

➡️ Easy Java | #Статья
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM