Обновить
512K+

Java *

Объектно-ориентированный язык программирования

207,2
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Однопоточный JavaScript и многопоточная Java: что быстрее?

Время на прочтение7 мин
Охват и читатели20K

Асинхронное выполнение на Java и JavaScript


При необходимости в JavaScript можно запускать дополнительные потоки. Но обычно в Node.js или в браузерах весь код на JavaScript выполняется в одном потоке. В браузерах один и тот же поток рендерит содержимое веб-страницы на экран. По сути, один поток выполнения занимается всеми задачами, потому что приложения JavaScript пользуются преимуществами асинхронного выполнения. Для асинхронного выполнения задача помещается в очередь задач. Задачи из очереди одна за другой выполняются единственным потоком. Например, вторая строка кода выполняет планирование асинхронной задачи, которая запускается после завершения текущей задачи:

console.log("1");
setTimeout(()=>console.log("2"));
console.log("3");

Результатом работы кода будет 1 3 2.

В Java API под асинхронным выполнением обычно подразумевается, что задача выполняется в новом выделенном потоке. Например, представленный ниже код при помощи метода supplyAsync() планирует асинхронную задачу:

System.out.println("current thread: " + Thread.currentThread().getName());
var future = CompletableFuture.supplyAsync(() -> Thread.currentThread().getName());
System.out.println("current thread: " + Thread.currentThread().getName());
System.out.println("task thread: " + future.get());

Результат работы программы показывает, что текущий поток создал новый поток для выполнения задачи:

current thread: main
current thread: main
task thread: ForkJoinPool.commonPool-worker-1

Проблема множественных потоков заключается в том, что Java runtime не может создавать бесконечное их количество. Когда все запущенные потоки ожидают, а новые потоки создать нельзя, приложение тоже ничего не будет делать.
Читать дальше →

Примеры утверждений JUnit 5

Время на прочтение8 мин
Охват и читатели56K

Это продолжение туториала по JUnit 5. Введение опубликовано здесь.

Утверждения (Assertions) JUnit 5 помогают сравнить ожидаемый результат с фактическим результатом теста. Для простоты все утверждения JUnit Jupiter являются статическими методами в классе org.junit.jupiter.Assertions .

Не успешные  утверждениея будет генерировать исключение AssertionFailedError  или его подкласс.

Оглавление

Читать далее

Helidon, Testcontainers, Cucumber, Kafka и многое другое

Время на прочтение12 мин
Охват и читатели4.6K

Helidon  отлично подходит для создания микросервисов, для простого и быстрого развертывания в проде, и демострирует действительно впечатляющую производительность!

А как насчет тестирования Helidon?

В этой статье мы рассмотрим несколько способов, как это сделать.

Читать далее

Прогресс GC от JDK 8 до JDK 17

Время на прочтение5 мин
Охват и читатели26K

JDK 17 с нами уже несколько месяцев и он не только про новые возможности языка Java. Прирост производительности в сравнении с более старыми версиями JDK очень заметен. Это становится особенно очевидно, когда мы сравниваем его с предыдущими LTS версиями: JDK 8 и JDK 11. Большая доля в улучшении производительности происходит из новых функций и оптимизаций в JVM, и в этой статье фокус будет на улучшениях, которые были сделаны в области сборки мусора в JVM

Читать статью

Skillbox Java Challenge: игра “на выживание” для разработчиков

Время на прочтение5 мин
Охват и читатели3.3K

Привет, Хабр! Хотим поделиться опытом проведения ролевых соревнований среди студентов и выпускников курса “Java-разработчик” — Skillbox Java Challenge (SJC). Созданная в 2019 году по инициативе студентов активность полюбилась всей команде, обросла интересными соревновательными и игровыми фичами. Этой осенью SJC состоялся уже в третий раз, его тематикой стали космические путешествия. О подробностях соревнования — под катом.

Читать далее

Отчеты о покрытии кода JUnit тестами с помощью Maven плагина JaCoCo

Время на прочтение6 мин
Охват и читатели53K

Это продолжение туториала по JUnit 5. Введение опубликовано здесь.

Научитесь создавать отчеты о покрытии кода для тестов JUnit с помощью подключаемого модуля JaCoCo Maven.

Читать далее

Автоматизация тестирования «с нуля» (нетехническая сторона вопроса)

Время на прочтение5 мин
Охват и читатели27K

Есть множество статей про технологии и те или иные подходы к автоматизации. Но почему-то нет статей про «обратную сторону» автоматизации. Как вообще всё зарождается на проекте? И как это «всё» организовать?

Читаю дальше

Полное руководство по расширениям JUnit 5

Время на прочтение27 мин
Охват и читатели49K

JUnit - одна из самых популярных сред модульного тестирования в экосистеме Java. Версия JUnit 5 (также известная как Jupiter) содержит множество интересных нововведений, включая поддержку новых функций в Java 8 и выше. Однако многие разработчики по-прежнему предпочитают использовать среду JUnit 4, поскольку некоторые функции, такие как параллельное выполнение в JUnit 5 все еще находятся в экспериментальной фазе.

За исключением нескольких незначительных вещей, JUnit 5 по-прежнему представляет собой важный шаг вперед в эволюции тестовой среды, поскольку он предоставляет расширенные аннотации, которые позволяют тестировать реактивные приложения. 

По моему опыту, JUnit 5 - лучшая версия JUnit. Новая структура также включает расширяемую архитектуру и совершенно новую модель расширений, которая упрощает реализацию пользовательских функций.

В этом руководстве по JUnit мы подробно рассмотрим расширения JUnit 5 - одну из основных функций платформы JUnit 5.

Читать далее

Разработка Telegram-бота на JAVA для генерации и считывания QR-кодов

Время на прочтение16 мин
Охват и читатели20K

пример разработки Tekegram-бота, функционал которого позволяет сканировать и генерировать QR-коды. Плюсы использования Telegram-бота в сравнении с традиционными приложениями-сканерами это: отсутствие необходимости устанавливать дополнительный софт (при наличии Telegram, естественно), возможность чтения цифровых изображений без использования камеры (например, из галереи или с web-сайта) и кроссплатформенность. Логика работы бота проста – отправляешь боту QR-код, в ответе получаешь расшифрованную информацию, отправляешь текст – в ответе получаешь QR-код. Просто? Да! Удобно? Несомненно!

Читать далее

Advent of Code с нами уже 7 лет

Время на прочтение1 мин
Охват и читатели4.8K

Приближается декабрь, а значит и ежегодный праздник программирования - Advent Of Code. Для тех кто устал перекладывать JSON-ы и шлепать формы.

Читать далее

Ожидаемое исключение JUnit 5

Время на прочтение3 мин
Охват и читатели44K

Это продолжение туториала по JUnit 5. Введение опубликовано здесь.

В JUnit 5, чтобы написать тестовый код, который, как ожидается, вызовет исключение, мы должны использовать Assertions.assertThrows().

В данном примере ожидается, что тестовый код в комментированном блоке вызовет исключение типа ApplicationException.

Читать далее

Туториал по JUnit 5 - Аннотация @RepeatedTest

Время на прочтение4 мин
Охват и читатели10K

Это продолжение туториала по JUnit 5. Введение опубликовано здесь.

Аннотация @RepeatedTest используется для написания повторяющихся тестовых шаблонов, которые могут выполняться несколько раз в JUnit. Частоту повторения можно настроить как параметр аннотации @RepeatedTest.

Читать далее

Туториал по JUnit 5  - Аннотация @Disabled

Время на прочтение2 мин
Охват и читатели7K

Это продолжение туториала по JUnit 5. Введение опубликовано здесь.

Аннотацию JUnit 5 @Disabled можно использовать для исключения методов тестирования из набора тестов. Эта аннотация может применяться как к классу тестирования, так и к отдельным методам тестирования.

Он принимает только один необязательный параметр, указывающий причину, по которой этот тест отключен.

Читать далее

Ближайшие события

Возможности Java 17 и рекомендации по миграции

Время на прочтение14 мин
Охват и читатели33K

Java значительно изменилась с годами. Прочтите сравнение версий 8 и 17 и узнайте ответ на вопрос: стоит ли обновляться?

Через несколько месяцев, в марте 2022 года, Java 8 закончится поддержка Oracle Premier Support. Это не означает, что он не будет получать никаких новых обновлений, но усилия Oracle, вложенные в его поддержку, вероятно, будут значительно меньше, чем сейчас.

Это означает, что будет веская причина для перехода на новую версию, тем более, что 14 сентября 2021 года была выпущена Java 17. Это новая версия долгосрочной поддержки, с Oracle Premier Support, которая продлится до сентября 2026 года (как минимум). 

Что дает Java 17? Насколько трудной будет миграция? Стоит ли оно того? 

Я постараюсь ответить на эти вопросы в этой статье.

Читать далее

Туториал по JUnit 5 - Аннотация @ParameterizedTest

Время на прочтение7 мин
Охват и читатели96K

Это продолжение туториала по JUnit 5. Введение опубликовано здесь.

Аннотация @ParameterizedTest, позволяет выполнить тест несколько раз, но с разными аргументами.

Описаны различные варианты указания источника аргументов, предоставляющего аргументы для каждого вызова, которые будут использоваться в тестовом методе.

Читать далее

Подробное руководство по инверсии зависимостей. Часть 2. Application модуль

Время на прочтение40 мин
Охват и читатели6.2K

Я, aa0ndrey, приветствую вас и приглашаю продолжить обсуждение темы инверсии зависимостей. В рамках данной финальной части будет рассмотрен application модуль. Будут определена его ответственность и будет рассмотрено то, как он взаимодействует со всеми остальными модулями.

Примеры, как и раньше, приведены на языке программирования java, но используются исключительно простые конструкции, чтобы любой читатель, понимающий на самом базовом уровне синтаксис java, смог понять данную статью.

Читать далее

Туториал по JUnit 5 - Аннотация @AfterAll

Время на прочтение3 мин
Охват и читатели6.2K

Это продолжение туториала по JUnit 5. Введение опубликовано здесь.

Аннотация JUnit 5 @AfterAll является заменой аннотации @AfterClass в JUnit 4. Она используется как метод очистки для тестового класса.

@AfterAll используется для обозначения того, что аннотированный метод должен быть выполнен после всех тестов в текущем тестовом классе.

Читать далее

Туториал по JUnit 5 - Аннотация @AfterEach

Время на прочтение2 мин
Охват и читатели7.6K

Это продолжение туториала по JUnit 5. Введение опубликовано здесь.

Аннотация @AfterEach используется для обозначения того, что аннотированный метод должен выполняться после каждого метода, помеченного @Test, @RepeatedTest, @ParameterizedTest, или @TestFactory в текущем классе.

Аннотация JUnit 5 @AfterEach является заменой аннотации @After в JUnit 4.

Читать далее

Туториал по JUnit 5 - Аннотация @BeforeEach

Время на прочтение3 мин
Охват и читатели20K

Это продолжение туториала по JUnit 5. Введение опубликовано здесь.

Аннотация @BeforeEach используется для обозначения того, что аннотированный метод должен выполняться перед каждым методом @Test, @RepeatedTest, @ParameterizedTest, или @TestFactory в текущем классе.

Аннотация JUnit 5 @BeforeEach является одним из методов жизненного цикла и заменяет аннотацию @Before в JUnit 4.

Читать далее

Туториал по JUnit 5 - Аннотация @BeforeAll

Время на прочтение2 мин
Охват и читатели22K

Это продолжение туториала по JUnit 5. Введение опубликовано здесь.

Аннотация JUnit 5 @BeforeAll обозначает метод, который является методом жизненного цикла. @BeforeAllэто замена @BeforeClassаннотации в JUnit 4.

Читать далее