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

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

Цены: @heywan_media

Реклама на бирже: https://telega.in/c/+r8kkGSypBY84MmIy
Download Telegram
📖 Разработка на Java без всего

Снова показываю как можно вести разработку «голыми руками» — без IDE, документации и даже интернета. На этот раз с помощью «пользовательской» Ubuntu Linux и OpenJDK.

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

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

Что такое ThreadLocal в Java и когда его стоит использовать?

Пример🔽
public class Main {
private static final ThreadLocal<Integer> threadId =
ThreadLocal.withInitial(() -> (int) (Math.random() * 1000));

public static void main(String[] args) {
Runnable task = () ->
System.out.println(Thread.currentThread().getName() + " → " + threadId.get());

new Thread(task, "Поток-1").start();
new Thread(task, "Поток-2").start();
new Thread(task, "Поток-3").start();
}
}


Ответ🔽
ThreadLocal хранит данные отдельно для каждого потока. Даже если переменная одна, каждый поток получает свою копию.

📌 Применения:
— хранение пользовательских сессий в веб-приложениях
— уникальные ID запросов в логах
— объекты, которые нельзя шарить между потоками (например, SimpleDateFormat).

Но важно не забывать вызывать remove(), чтобы избежать утечек памяти в пуле потоков.


➡️ Easy Java | #Собес
Please open Telegram to view this post
VIEW IN TELEGRAM
1
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