Easy Java
Kanalga Telegram’da o‘tish
Лучшие обучающие материалы и другие полезности для Java-разработчиков. Сотрудничество: @heywan_n1 Цены: @heywan_media Реклама на бирже: https://telega.in/c/+r8kkGSypBY84MmIy
Ko'proq ko'rsatish4 939
Obunachilar
+424 soatlar
-177 kun
-1830 kun
Postlar arxiv
4 939
👩💻 Что такое CyclicBarrier в Java и зачем он нужен?
CyclicBarrier — это синхронизатор из пакета
java.util.concurrent, который позволяет группе потоков дождаться друг друга, прежде чем продолжить выполнение.
В отличие от CountDownLatch, барьер можно использовать многократно — после того как все потоки достигли точки синхронизации, он сбрасывается и готов к новому циклу.• Синхронизирует несколько потоков в «точках встречи» • Можно выполнять дополнительное действие при достижении барьера • Подходит для повторяющихся этапов работы в параллельных задачах ⚡️ Пример:
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class Main {
public static void main(String[] args) {
CyclicBarrier barrier = new CyclicBarrier(3, () ->
System.out.println("Все потоки достигли барьера, продолжаем!")
);
Runnable task = () -> {
try {
System.out.println(Thread.currentThread().getName() + " готов");
barrier.await();
System.out.println(Thread.currentThread().getName() + " продолжает работу");
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
};
new Thread(task, "Поток 1").start();
new Thread(task, "Поток 2").start();
new Thread(task, "Поток 3").start();
}
}
👀 CyclicBarrier особенно полезен, когда несколько потоков должны синхронизировать свои шаги — например, в параллельных алгоритмах, симуляциях, или играх с одновременным обновлением состояния.➡️ Easy Java | #Теория
4 939
❓ Вопрос с собеса
Когда стоит использовать CopyOnWriteArrayList в Java?
Пример🔽
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
public class Main {
public static void main(String[] args) {
List<String> list = new CopyOnWriteArrayList<>();
list.add("A");
list.add("B");
for (String s : list) {
list.add("C"); // не вызовет ConcurrentModificationException
}
System.out.println(list);
}
}
Ответ🔽
CopyOnWriteArrayList — это потокобезопасная реализация List, которая копирует весь массив при каждой модификации. Она идеально подходит, когда: — много операций чтения и мало операций записи — нужно избежать ConcurrentModificationException при итерации — важна простая потокобезопасность без внешней синхронизации 📌 Недостаток — высокая стоимость записи, так как создаётся новая копия массива при каждом изменении.➡️ Easy Java | #Собес
4 939
👩💻 Что такое CountDownLatch в Java и зачем он нужен?
CountDownLatch — это синхронизатор из пакета java.util.concurrent, который позволяет одному или нескольким потокам ждать, пока другие потоки завершат свои задачи.
Он инициализируется счётчиком, и каждый вызов countDown() уменьшает его на 1. Как только счётчик достигает нуля — все ожидающие потоки продолжают выполнение.• Удобен для ожидания завершения группы потоков • Позволяет синхронизировать старт или окончание работы • Прост в использовании и потокобезопасен ⚡️ Пример:
import java.util.concurrent.CountDownLatch;
public class Main {
public static void main(String[] args) throws InterruptedException {
CountDownLatch latch = new CountDownLatch(3);
Runnable worker = () -> {
System.out.println(Thread.currentThread().getName() + " завершил работу");
latch.countDown();
};
new Thread(worker, "Поток 1").start();
new Thread(worker, "Поток 2").start();
new Thread(worker, "Поток 3").start();
latch.await(); // ждём, пока счётчик не станет 0
System.out.println("Все потоки завершили работу");
}
}
👀 CountDownLatch особенно полезен для синхронизации в тестах, многопоточных вычислениях и в случаях, когда нужно дождаться инициализации нескольких компонентов перед стартом основной логики.➡️ Easy Java | #Теория
4 939
❓ Вопрос с собеса
Чем ReentrantLock отличается от synchronized в Java?
Пример🔽
import java.util.concurrent.locks.ReentrantLock;
public class Main {
private static final ReentrantLock lock = new ReentrantLock();
private static int counter = 0;
public static void main(String[] args) {
Runnable task = () -> {
lock.lock();
try {
counter++;
} finally {
lock.unlock();
}
};
new Thread(task).start();
new Thread(task).start();
}
}
Ответ🔽
ReentrantLock — это класс из java.util.concurrent.locks, который предоставляет больше возможностей, чем synchronized: — Можно пытаться захватить блокировку с таймаутом (tryLock) — Можно использовать блокировку с несколькими условиями (Condition) — Можно вручную управлять моментом захвата и освобождения 📌 В отличие от synchronized, ReentrantLock требует явного вызова lock() и unlock(), что даёт гибкость, но требует дисциплины.➡️ Easy Java | #Собес
4 939
👨👨👨👨👨👨👨👨👨👨
Каналы с Junior IT вакансиями
и стажировками
Подписывайся и забирай свой оффер 🤘
1. Стажировки и вакансии по России и миру
2. IT вакансии по СНГ
3. IT стажировки по СНГ
4. IT стажировки и волонтерства
5. IT стажировки в топовых компаниях мира
6. Удалённые IT вакансии и стажировки
7. Python вакансии и стажировки
8. БИГТЕХ вакансии и стажировки
9. Design вакансии и стажировки
10. QA вакансии и стажировки
11. Junior вакансии и стажировки
12. Frontend вакансии и вопросы собесов
13. Вакансии и стажировки для аналитиков
14. Вакансии в русских стартапах за границей
15. Вакансии и стажировки для DevOps
16. Вакансии, которых нет на ХХ.РУ
4 939
Айтишники зарабатывают ДОХ#Я 💵💵
Не все, конечно, а только самые хваткие.
Кто с холодной головой и чёткой архитектурой внутри.
💼 Рынок сейчас покупает НЕ знания.
Он покупает тех, кто умеет собрать их в работающую модель
Бизнес-архитектор — канал о том, как люди в IT, бизнесе и на фрилансе собирают из своих знаний доход в несколько тысяч $ в месяц.
Подпишись и превращай знания в результат: ⤵️
https://t.me/+yEOgj-E-dYw0NWYy
https://t.me/+yEOgj-E-dYw0NWYy
4 939
👩💻 Что такое AtomicInteger в Java и зачем он нужен?
AtomicInteger — это класс из пакета java.util.concurrent.atomic, который обеспечивает атомарные операции над целыми числами без использования synchronized.
Все операции (incrementAndGet, decrementAndGet, compareAndSet) выполняются потокобезопасно благодаря низкоуровневым механизмам процессора (CAS — Compare-And-Swap).• Потокобезопасный счётчик без блокировок • Быстрее, чем
synchronized
• Подходит для высоконагруженных многопоточных систем
⚡️ Пример:
import java.util.concurrent.atomic.AtomicInteger;
public class Main {
private static final AtomicInteger counter = new AtomicInteger(0);
public static void main(String[] args) {
Runnable task = () -> {
for (int i = 0; i < 1000; i++) {
counter.incrementAndGet();
}
};
Thread t1 = new Thread(task);
Thread t2 = new Thread(task);
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException ignored) {}
System.out.println("Результат: " + counter.get());
}
}
👀 AtomicInteger особенно полезен при подсчёте событий, генерации ID или создании неблокирующих структур данных, где важна скорость и потокобезопасность без тяжёлых блокировок.➡️ Easy Java | #Теория
4 939
❓ Вопрос с собеса
Как работает try-with-resources в Java и чем он отличается от обычного try?
Пример🔽
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) {
System.out.println(reader.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
}
Ответ🔽
try-with-resources автоматически закрывает ресурсы (файлы, потоки, соединения) после выхода из блока try. Все классы, используемые в нём, должны реализовывать интерфейс AutoCloseable. 📌 В отличие от обычного try, нет необходимости вручную вызывать close() в finally. Закрытие ресурса гарантируется даже при исключениях.➡️ Easy Java | #Собес
4 939
Миллионер-айтишник в 24 года?
Знакомьтесь — это Влад, ему 24, и он программист без высшего образования..
IT и программирование — это ниша, которая никогда не умрет и в которой нет потолка !
~ Думаешь это сложно?
Я и тебя научу зарабатывать в IT и растить себя как высококлассного специалиста мирового уровня!
Не веришь? Забирай бесплатные материалы в моем канале 👇
https://t.me/+0-MtMJkZF2BlOWM6
