№ 5079899194
Обучающий канал по Java
Ссылка для друга - https://t.me/+ZEYYht6-46w5MDM6
По всем вопросам @mascarov_valentin
Реклама на бирже - https://telega.in/c/Java_per_month
Post #3177
2.04K
- 👍 7
- 🎄 4
JA @java_per_month
Showing posts older than #3179 · Back to latest

Массивы в Java передаются по ссылке. Метод modifyArray изменяет первый элемент массива на 42. Изменение сохраняется, потому что arr и numbers указывают на один и тот же массив.

ThreadLocal позволяет хранить переменные, привязанные к конкретному потоку. Каждый поток имеет свою копию переменной, что удобно для работы с многопоточностью, когда нужно избежать совместного доступа к данным.
synchronized) и забыть их освободить в случае исключения, можно легко привести к deadlock (взаимоблокировке).try-finally для гарантированного освобождения блокировки:public class FixedExample {
private final Object lock = new Object();
public void performTask() {
synchronized (lock) {
try {
System.out.println("Задача выполняется...");
if (true) {
throw new RuntimeException("Ошибка!");
}
System.out.println("Задача завершена.");
} finally {
System.out.println("Блокировка освобождена.");
}
}
}
public static void main(String[] args) {
FixedExample example = new FixedExample();
example.performTask();
}
}
for-eachfor-each (или enhanced for loop) упрощает итерацию по коллекциям и массивам. Давайте посмотрим, как он работает.• numbers — это массив целых чисел.• В строке for (int number : numbers) переменная number последовательно принимает значения из массива numbers.• На каждой итерации выводится текущее значение number.for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
1
2
3
4
5
CompletableFuture.supplyAsync() позволяет выполнять асинхронные задачи в фоновом потоке, возвращая результат. Это удобно для выполнения длительных операций без блокировки основного потока.
Map.replace() позволяет заменить значение, связанное с определённым ключом, если этот ключ уже существует в словаре. Это полезно для безопасного обновления данных.
Collectors.toSet() из Stream API позволяет собрать элементы потока в Set, автоматически убирая дубликаты.
ConcurrentHashMap в Java, как он работает и чем отличается от HashMap в многопоточной среде?import java.util.concurrent.ConcurrentHashMap;
public class Main {
public static void main(String[] args) {
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
map.put("Alice", 1);
map.put("Bob", 2);
map.computeIfPresent("Alice", (key, val) -> val + 1);
System.out.println(map); // {Alice=2, Bob=2}
}
}

System.nanoTime() в Java используется для получения текущего времени с высокой точностью, измеряемого в наносекундах. Этот метод полезен для точного измерения времени выполнения операций, например, для профилирования производительности вашего кода.
append() класса StringBuilder позволяет эффективно добавлять строки к уже существующему объекту. В отличие от конкатенации строк с использованием оператора +, StringBuilder позволяет избежать создания новых объектов строк в процессе добавления.
Math.floorMod в Java выполняет деление по модулю с учётом знаков, возвращая всегда положительный остаток. Это полезно при работе с круговыми индексами или в математике с отрицательными числами.
Статический блок выполняется один раз при первом обращении к классу, до выполнения main(). В статическом блоке значение x увеличивается на 10, поэтому x становится 15.

Collections.unmodifiableList() создаёт неизменяемый (immutable) список на основе существующего. Это удобно, когда нужно защитить коллекцию от изменений после её создания.