Какие ключевые нововведения представлены в Java 21?

«Какие ключевые нововведения представлены в Java 21?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Java 21 — это долгосрочная поддерживаемая (LTS) версия, которая представила несколько завершенных и предварительных функций. Ключевые нововведения:

  • Завершенные (Final) функции:

    • Virtual Threads (Виртуальные потоки) — легковесные потоки, упрощающие создание высокопроизводительных concurrent-приложений. Позволяют эффективно обслуживать миллионы одновременных задач.
      try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
          IntStream.range(0, 10_000).forEach(i -> {
              executor.submit(() -> {
                  Thread.sleep(Duration.ofSeconds(1));
                  return i;
              });
          });
      }
    • Record Patterns (Шаблоны записей) — декомпозиция значений записей (Record) в шаблонах instanceof и switch.
      // Декомпозиция в instanceof
      if (obj instanceof Point(int x, int y)) {
          System.out.println(x + y);
      }
      // Декомпозиция в switch
      switch (shape) {
          case Rectangle(Point(var x1, var y1), Point var p2) -> processRect(x1, y1, p2);
          case Circle(Point center, int radius) -> processCircle(center, radius);
      }
    • Pattern Matching for switch (Сопоставление с образцом для switch) — завершена возможность использования шаблонов, охраняющих условий (when) и null в выражениях switch.
    • Sequenced Collections (Упорядоченные коллекции) — новый унифицированный интерфейс для коллекций с четким порядком элементов (списки, очереди, двусторонние очереди). Добавлены методы getFirst(), getLast(), addFirst(), reversed().
  • Предварительные (Preview) и инкубационные (Incubator) функции:

    • String Templates (Шаблоны строк, Preview) — безопасная и эффективная интерполяция строк.
    • Scoped Values (Областные значения, Preview) — неизменяемые данные, безопасно и эффективно разделяемые между потоками (альтернатива ThreadLocal).
    • Structured Concurrency API (Структурная конкурентность, Incubator) — упрощает управление группами связанных задач, обрабатывая их как единую единицу работы.
  • Прочие улучшения: Обновления в сборщике мусора Generational ZGC и Shenandoah, новые методы в ключевых API (например, Math.clamp).