ch
Feedback
Easy Java

Easy Java

前往频道在 Telegram

Лучшие обучающие материалы и другие полезности для Java-разработчиков. Сотрудничество: @heywan_n1 Цены: @heywan_media Реклама на бирже: https://telega.in/c/+r8kkGSypBY84MmIy

显示更多
5 220
订阅者
-124 小时
-237
-8730
帖子存档
⚡️⚡️⚡️⚡️Нейросети объявили нам войну — и мы терпим поражение 👨‍💻Канал BlackDragon документирует наше отставание в реальном
⚡️⚡️⚡️⚡️Нейросети объявили нам войну — и мы терпим поражение 👨‍💻Канал BlackDragon документирует наше отставание в реальном времени! ➡️ Алгоритмы уже заменяют нас в ряде профессий! ➡️ИИ создает контент, который сложно отличить от человеческого! ➡️Нейросети анализируют данные быстрее человека в 17 раз! На канале расскажем как получать профит от нейронки, а не увольнение — https://t.me/+ONBHuVEQcz8xYjY6

Ответ:
Anonymous voting

➡️ Easy Java | #Викторина
➡️ Easy Java | #Викторина

👩‍💻 Что такое 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 | #Теория

Ответ:
Anonymous voting

➡️ Easy Java | #Викторина
➡️ Easy Java | #Викторина

Вопрос с собеса Когда стоит использовать 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 | #Собес

Ответ:
Anonymous voting

➡️ Easy Java | #Викторина
➡️ Easy Java | #Викторина

👩‍💻 Что такое 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 | #Теория

Ответ:
Anonymous voting

➡️ Easy Java | #Викторина
➡️ Easy Java | #Викторина

Вопрос с собеса Чем 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 | #Собес

➡️ Easy Java | #Мемы
➡️ Easy Java | #Мемы

Айтишники зарабатывают ДОХ#Я 💵💵 Не все, конечно, а только самые хваткие. Кто с холодной головой и чёткой архитектурой внутр
Айтишники зарабатывают ДОХ#Я 💵💵 Не все, конечно, а только самые хваткие. Кто с холодной головой и чёткой архитектурой внутри. 💼 Рынок сейчас покупает НЕ знания. Он покупает тех, кто умеет собрать их в работающую модель Бизнес-архитектор — канал о том, как люди в IT, бизнесе и на фрилансе собирают из своих знаний доход в несколько тысяч $ в месяц. Подпишись и превращай знания в результат: ⤵️ https://t.me/+yEOgj-E-dYw0NWYy https://t.me/+yEOgj-E-dYw0NWYy

Ответ:
Anonymous voting

➡️ Easy Java | #Викторина
➡️ Easy Java | #Викторина

👩‍💻 Что такое 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 | #Теория

Ответ:
Anonymous voting

Easy Java - Telegram 频道 @easyjava_23 的统计与分析