Java Interview Tasks
Канал "Java Interview Tasks" предлагает реальные вопросы и задачи, которые могут встретиться на собеседованиях для Java-разработчиков. Здесь вы найдете полезные материалы, связанные с Java, включая вопросы о ядре Java, коллекциях, Java 8, Servlets, JSP, JSTL, SQL, JDBC, UML, XML, HTML, CSS и других темах. Канал также предоставляет информацию о Telegram-боте, связанном с Java-разработкой, и активность статистики канала. Присоединяйтесь к каналу "Java Interview Tasks" и подготовьтесь к собеседованиям с уверенностью!
Какие есть недостатки в этом коде?
Где будет исполнен метод doInternal?
Anonymous Quiz
23% - В новом треде
41% - В том же треде что и forceThread
11% - Код упадет, так как метод run нельзя вызывать у потока
11% - Код не скомпилирется
14% - Узнать ответ
Где будет исполнен метод doInternal?
Результат получился ожидаемый. Виртуальные потоки создаются быстрее обычных как и ожидается.
Какие потоки будут создаваться быстрее?
Anonymous Quiz
55% - virtual threads быстрее
19% - большой разницы не будет
8% - threads быстрее
18% - узнать ответ
Какие потоки будут создаваться быстрее?
pinned Deleted message
Progress.java
2.2 KB
Полный код теста
Результат с volatile
Результат без volatile
Запускал эти тесты у себя локально, на jdk11:
java.specification.name Java Platform API Specification
java.specification.vendor Oracle Corporation
java.specification.version 11
java.vendor Amazon.com Inc.
java.version 11.0.19
java.vm.name OpenJDK 64-Bit Server VM
java.vm.vendor Amazon.com Inc.
java.vm.version 11.0.19+7-LTS
os.arch amd64
os.name Windows 11
os.version 10.0
какие тут проблемы могут быть? (метод get могут вызывать разные потоки одновременно)
Что бы понять нужен ли volatile над полем, проведем несколько тестов:
Будем использовать jcstress - https://openjdk.org/projects/code-tools/jcstress/
(https://youtu.be/uZfK-9ixxec?si=oE1Lqvp8_wxoLOuY)
Код двух экспериментов ниже:
проблемы в https://t.me/java_interview_tasks/328:
1) метод load() будет вызываться несколько раз , если новые потоки будут приходить до того как doLoad загрузит данные => одни и те же данные будут грузится паралельно, что может вызвать проблемы, например оом, плюс к этому на каждый вызову будет создаваться новый тред
2) возможно подразумевается что эксепшен из метода load перехватится в методе get, но этого не будет, так как он был выброшен в другом треде
Вопрос к экспертам по jmm: надо ли поле lastUpdate делать volatile ?
Telegram
Java Interview Tasksкакие тут проблемы могут быть? (метод get могут вызывать разные потоки одновременно)
какие тут проблемы могут быть? (метод get могут вызывать разные потоки одновременно)
Что такое java lts релиз?
Anonymous Quiz
60% - знаю
25% - не знаю
7% - не уверен что знаю:)
8% - узнать резхультаты
Вышла Java 22 - https://habr.com/ru/news/801467/
Хабр
Вышла Java 22Вышла общедоступная версия Java 22 . В этот релиз попало около 2300 закрытых задач и 12 JEP'ов . Release Notes можно посмотреть здесь . Полный список изменений API – здесь . Java 22 не является...
Результаты на моем ноуте:
# JMH version: 1.33
# VM version: JDK 21.0.1, OpenJDK 64-Bit Server VM, 21.0.1+12-29
# 16 cores
Benchmark Mode Cnt Score Error Units
Test.testCachedExecutorTask200ms avgt 2 214770,671 us/op
Test.testFixedExecutorTask200ms avgt 2 4260257,133 us/op
Test.testVirtualExecutorTask200ms avgt 2 212590,221 us/op
Интерпретация:
Разницы между Cached и Virtual нет. Это было ожидаемо. На такой нагрузке работа с потоками занимает относительно малое время по сравнению с бизнес логикой (200 ms в тестах).
Разница между Fixed может быть объяснена тем что плохо подобрано количество потоков в пуле.