База Hintsage

Программирование Java

Язык Java, JVM и экосистема серверной разработки.

Темы раздела

Выберите подраздел

  • 50 вопросов

    Java Core

    Базовая семантика языка, типы, методы, классы и ключевые конструкции.

    Открыть раздел
  • 50 вопросов

    ООП и система типов

    Наследование, полиморфизм, интерфейсы, классы и разрешение методов.

    Открыть раздел
  • 50 вопросов

    Коллекции

    Java Collections Framework, контракты, реализации и сложность операций.

    Открыть раздел
  • 50 вопросов

    Многопоточность

    Java Memory Model, потоки, синхронизация и java.util.concurrent.

    Открыть раздел
  • 50 вопросов

    JVM и память

    Загрузка классов, память JVM, GC, JIT и диагностика.

    Открыть раздел
  • 50 вопросов

    Generics

    Параметризация типов, bounds, wildcards и стирание типов.

    Открыть раздел
  • 50 вопросов

    Stream API

    Функциональные интерфейсы, streams, collectors и параллельная обработка.

    Открыть раздел
  • 50 вопросов

    Исключения

    Иерархия исключений, обработка ошибок и управление ресурсами.

    Открыть раздел

Практика

Вопросы: Программирование Java

Рассмотрите счётчик завершённых операций. Надёжно ли это условие запускает действие ровно один раз при достижении порога 100?

import java.util.concurrent.atomic.LongAdder;

class Progress {
    private final LongAdder completed = new LongAdder();

    void mark() {
        completed.increment();
        if (completed.sum() == 100) {
            System.out.println("Готово");
        }
    }
}

В коде ниже цепочка создаётся до завершения исходного этапа. Какой поток вправе выполнить тело thenApply?

import java.util.concurrent.CompletableFuture;

class Demo {
    public static void main(String[] args) throws Exception {
        CompletableFuture<String> source = new CompletableFuture<>();
        CompletableFuture<String> result = source.thenApply(value -> {
            System.out.println(Thread.currentThread().getName());
            return value.toUpperCase();
        });

        Thread producer = new Thread(() -> source.complete("ok"), "producer");
        producer.start();
        producer.join();
        result.join();
    }
}
Программирование JavaМногопоточностьJava-разработчик серверных приложений

В коде ниже определите причину зависания при попытке перейти от чтения к записи:

import java.util.concurrent.locks.ReentrantReadWriteLock;

class Demo {
    public static void main(String[] args) {
        ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
        lock.readLock().lock();
        try {
            lock.writeLock().lock();
            System.out.println("updated");
        } finally {
            lock.writeLock().unlock();
            lock.readLock().unlock();
        }
    }
}

Какой механизм приводит к зависанию и как корректно спроектировать такую операцию?

Программирование JavaМногопоточностьJava-разработчик серверных приложений

Показано 181–200 из 403

Восстановление доступа