Java. Многопоточность
Определение процессов и потоков. Роль операционной системы при работе с потоками. Интерфейс Runnable. Класс Thread. Доступ к объекту потока. Остановка выполнения и прерывание выполнения потока. Остановка текущего потока для окончания другого. Термины, связанные с многопоточностью. Критический участок кода. Семафор, Mutex. Мягкая и обязательная блокировки. Высокоуровневая конструкция Monitor. Взаимодействие потоков. Возможные ошибки одновременного доступа. Модель взаимодействия потоков через общую память. Синхронизация, её методы и состояния. Блокировка объектов. Ситуация Deadlock. Служба в отдельном потоке. Методы wait() и notify(). Контейнеры, безопасные для многопоточного доступа.
https://www.youtube.com/watch?v=dLDhB6SRXzw
👉@BookJava
Определение процессов и потоков. Роль операционной системы при работе с потоками. Интерфейс Runnable. Класс Thread. Доступ к объекту потока. Остановка выполнения и прерывание выполнения потока. Остановка текущего потока для окончания другого. Термины, связанные с многопоточностью. Критический участок кода. Семафор, Mutex. Мягкая и обязательная блокировки. Высокоуровневая конструкция Monitor. Взаимодействие потоков. Возможные ошибки одновременного доступа. Модель взаимодействия потоков через общую память. Синхронизация, её методы и состояния. Блокировка объектов. Ситуация Deadlock. Служба в отдельном потоке. Методы wait() и notify(). Контейнеры, безопасные для многопоточного доступа.
https://www.youtube.com/watch?v=dLDhB6SRXzw
👉@BookJava
YouTube
Java. Многопоточность (лекция 9)
«Технопарк Mail.ru Group» при МГТУ им. Н. Э. Баумана.
Курс «Углублённое программирование на Java» (зима 2015).
Лекция № 9: «Многопоточность».
Лектор — Виталий Чибриков.
Определение процессов и потоков. Роль операционной системы при работе с потоками. Интерфейс…
Курс «Углублённое программирование на Java» (зима 2015).
Лекция № 9: «Многопоточность».
Лектор — Виталий Чибриков.
Определение процессов и потоков. Роль операционной системы при работе с потоками. Интерфейс…
👍9
Почему метод clone() объявлен в классе Object, а не в интерфейсе Cloneable?
Метод clone() объявлен в классе Object с указанием модификатора native, чтобы обеспечить доступ к стандартному механизму поверхностного копирования объектов. Одновременно он объявлен и как protected, чтобы нельзя было вызвать этот метод у не переопределивших его объектов. Непосредственно интерфейс Cloneable является маркерным (не содержит объявлений методов) и нужен только для обозначения самого факта, что данный объект готов к тому, чтобы быть клонированным. Вызов переопределённого метода clone() у не Cloneable объекта вызовет выбрасывание CloneNotSupportedException.
👉@BookJava
Метод clone() объявлен в классе Object с указанием модификатора native, чтобы обеспечить доступ к стандартному механизму поверхностного копирования объектов. Одновременно он объявлен и как protected, чтобы нельзя было вызвать этот метод у не переопределивших его объектов. Непосредственно интерфейс Cloneable является маркерным (не содержит объявлений методов) и нужен только для обозначения самого факта, что данный объект готов к тому, чтобы быть клонированным. Вызов переопределённого метода clone() у не Cloneable объекта вызовет выбрасывание CloneNotSupportedException.
👉@BookJava
👍8❤1
Интервью с создателем Java Джеймсом Гослингом
Джеймс Гослинг, более известный как отец языка программирования Java, — специалист в области Computer Science из Канады. Он придумал изначальную архитектуру языка программирования Java, написал для него первый компилятор и виртуальную машину. Наш DevRel, Григорий Петров, взял интервью у Джеймса, и мы приводим полный текст этого интервью в русском переводе. Приятного чтения!
https://evrone.ru/james-gosling-interview
👉@BookJava
Джеймс Гослинг, более известный как отец языка программирования Java, — специалист в области Computer Science из Канады. Он придумал изначальную архитектуру языка программирования Java, написал для него первый компилятор и виртуальную машину. Наш DevRel, Григорий Петров, взял интервью у Джеймса, и мы приводим полный текст этого интервью в русском переводе. Приятного чтения!
https://evrone.ru/james-gosling-interview
👉@BookJava
evrone.ru
Интервью создателя Java Джеймса Гослинга для Evrone
Джеймс Гослинг, более известный как отец языка программирования Java, — специалист в области Computer Science из Канады. Он придумал изначальную архитектуру языка программирования Java, написал для него первый компилятор и виртуальную машину. Наш DevRel,…
👍9
Где и как вы можете использовать приватный конструктор?
Приватный (помеченный ключевым словом
👉@BookJava
Приватный (помеченный ключевым словом
private
, скрытый) конструктор может использоваться публичным статическим методом генерации объектов данного класса. Также доступ к нему разрешён вложенным классам и может использоваться для их нужд.👉@BookJava
👍6
Не верьте ChatGPT и используйте KotUniL
В последние недели медиа и социальные сети захлеснул поток сообщений о диалогах с ChatGPT. Только на Хабре поиск по этому термину показывает сегодня полтора десятка статей.
Попробовал пообщаться с ChatGPT и я. Результат общения вынесен в заголовок.
Хотите узнать, почему ChatGPT верить нельзя и почему лучше использовать KotUniL - читайте дальше.
А если вы решили читать дальше, не воспринимайте заголовок буквально. Это все-таки ирония. К сожалению, я не предупредил об этом читателей в первом варианте этой статьи и получил в результате массу минусов.
Итак, как было дело.
Сначала я пообщался с ChatGPT (далее для простоты я буду иногда обозначать его ИИ) на английском, а потом на русском.
https://habr.com/ru/post/707548/
👉@BookJava
В последние недели медиа и социальные сети захлеснул поток сообщений о диалогах с ChatGPT. Только на Хабре поиск по этому термину показывает сегодня полтора десятка статей.
Попробовал пообщаться с ChatGPT и я. Результат общения вынесен в заголовок.
Хотите узнать, почему ChatGPT верить нельзя и почему лучше использовать KotUniL - читайте дальше.
А если вы решили читать дальше, не воспринимайте заголовок буквально. Это все-таки ирония. К сожалению, я не предупредил об этом читателей в первом варианте этой статьи и получил в результате массу минусов.
Итак, как было дело.
Сначала я пообщался с ChatGPT (далее для простоты я буду иногда обозначать его ИИ) на английском, а потом на русском.
https://habr.com/ru/post/707548/
👉@BookJava
👍6
Какими свойствами обладает порождаемое equals() отношение эквивалентности?
Рефлексивность: для любой ссылки на значение
Симметричность: для любых ссылок на значения
Транзитивность: для любых ссылок на значения
Непротиворечивость: для любых ссылок на значения
Для любой ненулевой ссылки на значение
👉@BookJava
Рефлексивность: для любой ссылки на значение
x, x.equals(x)
вернет true
;Симметричность: для любых ссылок на значения
x
и y
, x.equals(y)
должно вернуть true
, тогда и только тогда, когда y.equals(x)
возвращает true
.Транзитивность: для любых ссылок на значения
x
, y
и z
, если x.equals(y)
и y.equals(z)
возвращают true
, тогда и x.equals(z)
вернёт true
;Непротиворечивость: для любых ссылок на значения
х
и у
, если несколько раз вызвать х.equals(y)
, постоянно будет возвращаться значение true
либо постоянно будет возвращаться значение false
при условии, что никакая информация, используемая при сравнении объектов, не поменялась.Для любой ненулевой ссылки на значение
х
выражение х.equals(null)
должно возвращать false
.👉@BookJava
👍6
Как написать на Java функцию, подобную sizeof в C
https://levelup.gitconnected.com/how-to-write-a-c-like-sizeof-function-in-java-9352e646d112
👉@BookJava
https://levelup.gitconnected.com/how-to-write-a-c-like-sizeof-function-in-java-9352e646d112
👉@BookJava
👍3👎2
15 Tips to Become a Java Expert!
https://dev.to/weder96/15-tips-to-become-a-java-expert-1acj
👉@BookJava
https://dev.to/weder96/15-tips-to-become-a-java-expert-1acj
👉@BookJava
👍4
Можно ли хранить null в стандартных коллекциях?
Все интерфейсы Collections Framework позволяют своим реализациям самостоятельно решать, поддерживать ли null-значения. Если реализация не может принять
Большинство списков (
Unmodifiable Maps не допускают null-ов совсем. Обычные изменяемые мапы обычно не испытывают трудности со значениями null. А вот с ключами дело обстоит интереснее.
Иногда этот вопрос дается как задача с подвохом про
Для значений Set-ов действуют те же правила, что для ключей лежащих в основе их Map-ов.
👉@BookJava
Все интерфейсы Collections Framework позволяют своим реализациям самостоятельно решать, поддерживать ли null-значения. Если реализация не может принять
null
, она выбрасывает NullPointerException
или ClassCastException
.Большинство списков (
LinkedList
, ArrayList
) принимают null без проблем. Большинство очередей (Queue
и Deque
) не хранят null – возвращая из читающего метода null они сообщают пользователю о пустоте коллекции.Unmodifiable Maps не допускают null-ов совсем. Обычные изменяемые мапы обычно не испытывают трудности со значениями null. А вот с ключами дело обстоит интереснее.
HashMap
не может посчитать hash-сумму от null. Но вместо этого для таких ключей просто используется бакет номер 0.Иногда этот вопрос дается как задача с подвохом про
TreeMap
. Nullability
её ключей зависит от готовности к этому компаратора. Натуральный порядок (который работает для Comparable ключей) не поддерживает null. Раньше в реализации был баг, который позволял положить значение по ключу null в корень дерева без выброса исключения.Для значений Set-ов действуют те же правила, что для ключей лежащих в основе их Map-ов.
👉@BookJava
👍4
Один день из жизни JVM-инженера
Можно разрабатывать на Java, а можно разрабатывать Java. Есть люди, чей код исполняет виртуальная машина — а есть люди, чей код и есть виртуальная машина.
Вроде бы те и другие существуют в одной Java-экосистеме, но задачи совершенно разные.
https://habr.com/ru/company/jugru/blog/719614/
👉@BookJava
Можно разрабатывать на Java, а можно разрабатывать Java. Есть люди, чей код исполняет виртуальная машина — а есть люди, чей код и есть виртуальная машина.
Вроде бы те и другие существуют в одной Java-экосистеме, но задачи совершенно разные.
https://habr.com/ru/company/jugru/blog/719614/
👉@BookJava
👍8🔥3
Media is too big
VIEW IN TELEGRAM
Собеседование Java Spring - Разбор вопросов с собеседований на Java Developer
Собрали самые интересные вопросы с собеседований на Java-разработчика. В видео две части. В первой рассказываем про Java: Коллекции, Hash Code & Equals Contract, Functional interfaces, Stream API, Garbage collector, устройство памяти, heap, concurrency.
Во второй — про Spring: Spring Beans, Spring Data Repository, Аннотации, Programmatic TM, Spring MVC
источник
👉@BookJava
Собрали самые интересные вопросы с собеседований на Java-разработчика. В видео две части. В первой рассказываем про Java: Коллекции, Hash Code & Equals Contract, Functional interfaces, Stream API, Garbage collector, устройство памяти, heap, concurrency.
Во второй — про Spring: Spring Beans, Spring Data Repository, Аннотации, Programmatic TM, Spring MVC
источник
👉@BookJava
👍13
Содержит множество проектов на Java, которые могут быть полезны при изучении языка
https://github.com/topics/java
👉@BookJava
https://github.com/topics/java
👉@BookJava
GitHub
GitHub is where people build software. More than 150 million people use GitHub to discover, fork, and contribute to over 420 million projects.
👍7
Media is too big
VIEW IN TELEGRAM
Java. Распараллеливаем вычисления на пуле потоков
Разбираемся, как можно по простому ускорить вычисления с помощью параллельного выполнения на пуле потоков.
Исходный код
источник
👉@BookJava
Разбираемся, как можно по простому ускорить вычисления с помощью параллельного выполнения на пуле потоков.
Исходный код
источник
👉@BookJava
👍6
Media is too big
VIEW IN TELEGRAM
Телеграм бот-игра на JAVA в 100 строк
Пишем телеграм бота, реализующего простую игру в стиле "камень-ножницы-бумага" на чистой джава + библиотека telegram api. Для пущей сложности я делаю это без БД и при этом пытаюсь выдернуть информацию о том, в каком чате происходит дело (может пригодиться для хранения какой-либо статистики)
Код из видео
Использованная библиотека
источник
👉@BookJava
Пишем телеграм бота, реализующего простую игру в стиле "камень-ножницы-бумага" на чистой джава + библиотека telegram api. Для пущей сложности я делаю это без БД и при этом пытаюсь выдернуть информацию о том, в каком чате происходит дело (может пригодиться для хранения какой-либо статистики)
Код из видео
Использованная библиотека
источник
👉@BookJava
👍8
Media is too big
VIEW IN TELEGRAM
Как из Java приложения запустить другую программу?
Самый простой и базовый способ – с помощью метода
Рекомендуемый, и более управляемый способ – использование класса
В результате запуска команды создается объект класса
Команда запускается в отдельном подпроцессе операционной системы. Это значит, что лозунг «Write once, run anywhere» перестает здесь работать – ваша программа становится платформо-зависимой. Обращение к ОС, а тем более выделение нового процесса обычно занимает немало ресурсов компьютера. Запуск внешних программ не считается плохой практикой, но всё-таки при возможности стоит его избегать.
👉@BookJava
Самый простой и базовый способ – с помощью метода
Runtime.getRuntime().exec()
. В качестве параметра ему передается строка системной команды. Опциональные можно передать рабочую директорию, и переменные окружения в виде массива строк "имя=значение
". Если команде нужны аргументы, они передаются либо массивом, либо в той же строке команды через пробелы.Рекомендуемый, и более управляемый способ – использование класса
ProcessBuilder
. Он же применяется внутри метода exec
. Билдер дает, например, средства для использования в команде пайплайнов и редиректов ввода-вывода.В результате запуска команды создается объект класса
Process
. Его можно сконвертировать в более современный (Java 9+) и функциональный ProcessHandle
. Через эти объекты идет работа с вводом-выводом процесса, его характеристиками и статусом.Команда запускается в отдельном подпроцессе операционной системы. Это значит, что лозунг «Write once, run anywhere» перестает здесь работать – ваша программа становится платформо-зависимой. Обращение к ОС, а тем более выделение нового процесса обычно занимает немало ресурсов компьютера. Запуск внешних программ не считается плохой практикой, но всё-таки при возможности стоит его избегать.
👉@BookJava
👍6🔥2
Почему не рекомендуется использовать метод Thread.stop()?
При принудительной остановке (приостановке) потока,
👉@BookJava
При принудительной остановке (приостановке) потока,
stop()
прерывает поток в недетерменированном месте выполнения, в результате становится совершенно непонятно, что делать с принадлежащими ему ресурсами. Поток может открыть сетевое соединение - что в таком случае делать с данными, которые еще не вычитаны? Где гарантия, что после дальнейшего запуска потока (в случае приостановки) он сможет их дочитать? Если поток блокировал разделяемый ресурс, то как снять эту блокировку и не переведёт ли принудительное снятие к нарушению консистентности системы? То же самое можно расширить и на случай соединения с базой данных: если поток остановят посередине транзакции, то кто ее будет закрывать? Кто и как будет разблокировать ресурсы?👉@BookJava
👍4👎1
Media is too big
VIEW IN TELEGRAM
Рисуем звук. Почувствуй себя нейросетью. Java, Guice
Сегодня java, guice и другие - помогут нам записать звук в представление чуть более непонятное чем эквалайзер (по крайней мере для меня). Вы при желании можете записать что-то другое.
00:00 Demo
01:34 Under the hood
02:44 Quickstart Archetype
04:28 BytesFetcher interface
05:32 AudioBytesFetcher
15:00 ImageDrawService
27:44 Guice module
28:51 App
34:40 Start
35:36 Success
36:23 Result
GitHub
источник
👉@BookJava
Сегодня java, guice и другие - помогут нам записать звук в представление чуть более непонятное чем эквалайзер (по крайней мере для меня). Вы при желании можете записать что-то другое.
00:00 Demo
01:34 Under the hood
02:44 Quickstart Archetype
04:28 BytesFetcher interface
05:32 AudioBytesFetcher
15:00 ImageDrawService
27:44 Guice module
28:51 App
34:40 Start
35:36 Success
36:23 Result
GitHub
источник
👉@BookJava
👍3🔥1