❓ Вопрос на собеседовании
Что такое ThreadLocal в Java и для чего он используется?
Ответ ⬇️
ThreadLocal — это механизм, который позволяет каждому потоку хранить уникальное значение переменной, изолированное от других потоков. Это особенно полезно для управления состоянием в многопоточных приложениях, например, для хранения информации о текущем пользователе в веб-приложениях.
Пример использования ⚙️
public class ThreadLocalExample {
private static final ThreadLocal threadLocal = ThreadLocal.withInitial(() -> 0);
public static void main(String[] args) {
Runnable task = () -> {
threadLocal.set((int) (Math.random() * 100));
System.out.println(Thread.currentThread().getName() + ": " + threadLocal.get());
};
new Thread(task).start();
new Thread(task).start();
}
}
👩💻
@javaquiz
Что такое ThreadLocal в Java и для чего он используется?
Ответ ⬇️
ThreadLocal — это механизм, который позволяет каждому потоку хранить уникальное значение переменной, изолированное от других потоков. Это особенно полезно для управления состоянием в многопоточных приложениях, например, для хранения информации о текущем пользователе в веб-приложениях.
Пример использования ⚙️
public class ThreadLocalExample {
private static final ThreadLocal threadLocal = ThreadLocal.withInitial(() -> 0);
public static void main(String[] args) {
Runnable task = () -> {
threadLocal.set((int) (Math.random() * 100));
System.out.println(Thread.currentThread().getName() + ": " + threadLocal.get());
};
new Thread(task).start();
new Thread(task).start();
}
}
👩💻
@javaquiz
⚙️ ProcessHandle.children()
ProcessHandle.children() предоставляет поток (Stream) дочерних процессов текущего процесса. Это может быть полезно для отслеживания запущенных подпроцессов и их управления.
👩💻
@javaquiz
ProcessHandle.children() предоставляет поток (Stream) дочерних процессов текущего процесса. Это может быть полезно для отслеживания запущенных подпроцессов и их управления.
👩💻
@javaquiz
⚙️ MethodHandles.dropArguments()
MethodHandles.dropArguments() создает MethodHandle, который не учитывает некоторые аргументы при вызове целевой функции. Это удобно для адаптации методов с различными сигнатурами.
👩💻
@javaquiz
MethodHandles.dropArguments() создает MethodHandle, который не учитывает некоторые аргументы при вызове целевой функции. Это удобно для адаптации методов с различными сигнатурами.
👩💻
@javaquiz
⚙️ StackWalker.getInstance() позволяет извлекать данные о стеке вызовов в процессе работы программы, что облегчает отладку и ведение логов. 👩💻
@javaquiz
@javaquiz
⚙️ Locale.getDefault()
Locale.getDefault() дает возможность узнать текущую локаль системы, что полезно при форматировании дат, чисел и текста.
👩💻
@javaquiz
Locale.getDefault() дает возможность узнать текущую локаль системы, что полезно при форматировании дат, чисел и текста.
👩💻
@javaquiz
⚙️ Метод Thread.getState() позволяет узнать текущее состояние потока. Это полезно для отладки многопоточных программ, так как помогает определить, выполняется ли поток, заблокирован он или завершён.
👩💻
@javaquiz
👩💻
@javaquiz
⚙️ ProcessHandle.isAlive() позволяет узнать, активен ли процесс в данный момент. Это полезно для отслеживания фоновых процессов и управления ресурсами системы.
👩💻
@javaquiz
👩💻
@javaquiz
ScopedValue.where() позволяет безопасно передавать контекстные данные в пределах потока, предотвращая утечки памяти и проблемы, связанные с использованием ThreadLocal. Данные доступны только в пределах определенного блока кода.
👩💻
@javaquiz
👩💻
@javaquiz
⚙️ TerminalBuilder.build() из библиотеки JLine позволяет создавать интерактивные терминалы, которые поддерживают ANSI-цвета, автодополнение и управление вводом. Это очень удобно для разработки CLI-приложений с комфортным интерфейсом.
🔗 Документация (https://jline.github.io/)
👩💻
@javaquiz
🔗 Документация (https://jline.github.io/)
👩💻
@javaquiz
🚫 Антипаттерн недели: Неиспользование конструкции try-with-resources при работе с ресурсами
В Java необходимо гарантировать закрытие ресурсов (таких как файлы, потоки и соединения). Если этого не делать, могут возникнуть утечки памяти и зависание приложения.
✔️ Применяйте конструкцию try-with-resources, чтобы автоматически закрывать ресурсы.
👩💻
@javaquiz
В Java необходимо гарантировать закрытие ресурсов (таких как файлы, потоки и соединения). Если этого не делать, могут возникнуть утечки памяти и зависание приложения.
✔️ Применяйте конструкцию try-with-resources, чтобы автоматически закрывать ресурсы.
👩💻
@javaquiz
AnsiConsole.out.println() из библиотеки Jansi дает возможность выводить текст в цвете в консоль, что облегчает создание стилизованных CLI-приложений с поддержкой ANSI-escape последовательностей.
Документация доступна по ссылке: https://fusesource.github.io/jansi
👩💻
@javaquiz
Документация доступна по ссылке: https://fusesource.github.io/jansi
👩💻
@javaquiz
⚙️ Lombok @SuperBuilder
@SuperBuilder из библиотеки Lombok облегчает процесс создания объектов, используя паттерн "Builder", и поддерживает наследование. Это позволяет избежать написания излишнего кода при создании сложных иерархий классов.
🔗 Документация
👩💻
@javaquiz
@SuperBuilder из библиотеки Lombok облегчает процесс создания объектов, используя паттерн "Builder", и поддерживает наследование. Это позволяет избежать написания излишнего кода при создании сложных иерархий классов.
🔗 Документация
👩💻
@javaquiz
⚙️ Метод String.stripIndent() убирает общие начальные пробелы из всех строк многострочного текста, что делает его более удобным для чтения и форматирования. Это особенно полезно при работе с текстовыми блоками в коде.
🔗 Документация (https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#stripIndent())
👩💻
@javaquiz
🔗 Документация (https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#stripIndent())
👩💻
@javaquiz
⚙️ CompletableFuture.delayedExecutor()
CompletableFuture.delayedExecutor() дает возможность запустить задачу с задержкой, не блокируя основной поток. Это полезный инструмент для асинхронных операций с задержкой.
🔗 Документация (https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/CompletableFuture.html#delayedExecutor(long,java.util.concurrent.TimeUnit))
👩💻
@javaquiz
CompletableFuture.delayedExecutor() дает возможность запустить задачу с задержкой, не блокируя основной поток. Это полезный инструмент для асинхронных операций с задержкой.
🔗 Документация (https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/CompletableFuture.html#delayedExecutor(long,java.util.concurrent.TimeUnit))
👩💻
@javaquiz
⚙️ CompletableFuture.delayedExecutor()
CompletableFuture.delayedExecutor() дает возможность выполнить задачу с задержкой без блокировки основного потока. Это полезный инструмент для асинхронных операций с задержкой.
🔗 Документация (https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/CompletableFuture.html#delayedExecutor(long,java.util.concurrent.TimeUnit))
👩💻
@javaquiz
CompletableFuture.delayedExecutor() дает возможность выполнить задачу с задержкой без блокировки основного потока. Это полезный инструмент для асинхронных операций с задержкой.
🔗 Документация (https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/CompletableFuture.html#delayedExecutor(long,java.util.concurrent.TimeUnit))
👩💻
@javaquiz