Каким образом можно создать поток?
• Создать потомка класса Thread и переопределить его метод run();
• Создать объект класса Thread, передав ему в конструкторе экземпляр класса, реализующего интерфейс Runnable. Эти интерфейс содержит метод run(), который будет выполняться в новом потоке. Поток закончит выполнение, когда завершится его метод run().
• Вызвать метод submit() у экземпляра класса реализующего интерфейс ExecutorService, передав ему в качестве параметра экземпляр класса реализующего интерфейс Runnable или Callable (содержит метод call(), в котором описывается логика выполнения).
• Создать потомка класса Thread и переопределить его метод run();
• Создать объект класса Thread, передав ему в конструкторе экземпляр класса, реализующего интерфейс Runnable. Эти интерфейс содержит метод run(), который будет выполняться в новом потоке. Поток закончит выполнение, когда завершится его метод run().
• Вызвать метод submit() у экземпляра класса реализующего интерфейс ExecutorService, передав ему в качестве параметра экземпляр класса реализующего интерфейс Runnable или Callable (содержит метод call(), в котором описывается логика выполнения).
#вопросы_с_собеседований
В чём заключается разница между методами start() и run()?
Несмотря на то, что
В чём заключается разница между методами start() и run()?
Несмотря на то, что
start()
вызывает метод run()
внутри себя, это не то же самое, что просто вызов run()
. Если run()
вызывается как обычный метод, то он вызывается в том же потоке и никакой новый поток не запускается, как это происходит, в случае, когда вы вызываете метод start()
.🔥 Бесплатная Live coding сессия, где будем решать задачу с собеседования в международную FinTech компанию
В прямом эфире Роман Оборин, Senior Java Developer в BNP Paribas и преподаватель курса Middle Java Dev, проведет Live coding сессию по написанию объектно-ориентированного кода на Java, покрытого разными типами тестов: Unit, Integration, Stress.
На Live сoding ты сможешь понаблюдать, как пишет код Senior-разработчик, прокомментировать процесс и решить реальную задачу, которую дают на собеседованиях. Ну и конечно, прокачаешь свои hard skills:
— Структурируешь знания по принципам SOLID
— Прокачаешь знания по разным видам тестирования, в том числе многопоточных программ
— Подготовишься к техническому интервью с этапом Live coding
🚀 Стартуем 18 августа в 19.00 по МСК
Регистрируйся бесплатно: https://cutt.ly/BZ0wv09
В прямом эфире Роман Оборин, Senior Java Developer в BNP Paribas и преподаватель курса Middle Java Dev, проведет Live coding сессию по написанию объектно-ориентированного кода на Java, покрытого разными типами тестов: Unit, Integration, Stress.
На Live сoding ты сможешь понаблюдать, как пишет код Senior-разработчик, прокомментировать процесс и решить реальную задачу, которую дают на собеседованиях. Ну и конечно, прокачаешь свои hard skills:
— Структурируешь знания по принципам SOLID
— Прокачаешь знания по разным видам тестирования, в том числе многопоточных программ
— Подготовишься к техническому интервью с этапом Live coding
🚀 Стартуем 18 августа в 19.00 по МСК
Регистрируйся бесплатно: https://cutt.ly/BZ0wv09
#вопросы_с_собеседований
Дайте определение понятию «синхронизация».
Синхронизация - это процесс, который позволяет выполнять потоки параллельно.
В Java все объекты имеют одну блокировку, благодаря которой только один поток одновременно может получить доступ к критическому коду в объекте. Такая синхронизация помогает предотвратить повреждение состояния объекта. Если поток получил блокировку, ни один другой поток не может войти в синхронизированный код, пока блокировка не будет снята. Когда поток, владеющий блокировкой, выходит из синхронизированного кода, блокировка снимается. Теперь другой поток может получить блокировку объекта и выполнить синхронизированный код. Если поток пытается получить блокировку объекта, когда другой поток владеет блокировкой, поток переходит в состояние Блокировки до тех пор, пока блокировка не снимется.
Дайте определение понятию «синхронизация».
Синхронизация - это процесс, который позволяет выполнять потоки параллельно.
В Java все объекты имеют одну блокировку, благодаря которой только один поток одновременно может получить доступ к критическому коду в объекте. Такая синхронизация помогает предотвратить повреждение состояния объекта. Если поток получил блокировку, ни один другой поток не может войти в синхронизированный код, пока блокировка не будет снята. Когда поток, владеющий блокировкой, выходит из синхронизированного кода, блокировка снимается. Теперь другой поток может получить блокировку объекта и выполнить синхронизированный код. Если поток пытается получить блокировку объекта, когда другой поток владеет блокировкой, поток переходит в состояние Блокировки до тех пор, пока блокировка не снимется.
#вопросы_с_собеседований
Какие существуют способы синхронизации в Java?
•
•
•
Какие существуют способы синхронизации в Java?
•
Системная синхронизация с использованием wait()/notify()
. Поток, который ждет выполнения каких-либо условий, вызывает у этого объекта метод wait()
, предварительно захватив его монитор. На этом его работа приостанавливается. Другой поток может вызвать на этом же самом объекте метод notify()
(опять же, предварительно захватив монитор объекта), в результате чего, ждущий на объекте поток «просыпается» и продолжает свое выполнение. В обоих случаях монитор надо захватывать в явном виде, через synchronized-блок
, потому как методы wait()/notify()
не синхронизированы!•
Системная синхронизация с использованием join(). Метод join()
, вызванный у экземпляра класса Thread
, позволяет текущему потоку остановиться до того момента, как поток, связанный с этим экземпляром, закончит работу.•
Использование классов из пакета java.util.concurrent
, который предоставляет набор классов для организации межпоточного взаимодействия. Примеры таких классов - Lock
, Semaphore
и пр.. Концепция данного подхода заключается в использовании атомарных операций и переменных.👍 Как правильно писать сообщения коммитов в GIT, чтобы всем было хорошо
Правильно написанные сообщения к коммитам в Git помогают сделать проект с открытым или закрытым исходным кодом удобным для дальнейшей доработки и поддержки. В этой статье вы познакомитесь с различными стратегиями написания хороших сообщений и их использования для оптимизации процесса разработки.
🔗 Основной сайт
🔗 Зеркало
Правильно написанные сообщения к коммитам в Git помогают сделать проект с открытым или закрытым исходным кодом удобным для дальнейшей доработки и поддержки. В этой статье вы познакомитесь с различными стратегиями написания хороших сообщений и их использования для оптимизации процесса разработки.
🔗 Основной сайт
🔗 Зеркало
В каких состояниях может находиться поток?
Потоки могут находиться в одном из следующих состояний:
•
•
•
•
○
○
○
○
Потоки могут находиться в одном из следующих состояний:
•
Новый (New)
. После создания экземпляра потока, он находится в состоянии Новый до тех пор, пока не вызван метод start()
. В этом состоянии поток не считается живым.•
Работоспособный (Runnable)
. Поток переходит в состояние Работоспособный, когда вызывается метод start()
. Поток может перейти в это состояние также из состояния Работающий или из состояния Блокирован. Когда поток находится в этом состоянии, он считается живым.•
Работающий (Running)
. Поток переходит из состояния Работоспособный в состояние Работающий, когда Планировщик потоков выбирает его как работающий в данный момент.•
Живой, но не работоспособный (Alive, but not runnable)
. Поток может быть живым, но не работоспособным по нескольким причинам:○
Ожидание (Waiting)
. Поток переходит в состояние Ожидания, вызывая метод wait()
. Вызов notify()
или notifyAll()
может перевести поток из состояния Ожидания в состояние Работоспособный.○
Сон (Sleeping)
. Метод sleep()
переводит поток в состояние Сна на заданный промежуток времени в миллисекундах.○
Блокировка (Blocked)
. Поток может перейти в это состояние, в ожидании ресурса, такого как ввод/вывод или из-за блокировки другого объекта. В этом случае поток переходит в состояние Работоспособный, когда ресурс становится доступен.○
Мёртвый (Dead)
. Поток считается мёртвым, когда его метод run()
полностью выполнен. Мёртвый поток не может перейти ни в какое другое состояние, даже если для него вызван метод start()
.#вопросы_с_собеседований
Можно ли создавать новые экземпляры класса, пока выполняется static synchronized метод?
Да, можно создавать новые экземпляры класса, так как статические поля не принадлежат к экземплярам класса.
Можно ли создавать новые экземпляры класса, пока выполняется static synchronized метод?
Да, можно создавать новые экземпляры класса, так как статические поля не принадлежат к экземплярам класса.
🔥Меня уволили: 8 способов справиться с потерей работы и найти новую
Увольнение – это всегда стресс. А в нынешнее тяжелое время и вовсе «конец света». Расскажем, как не опускать руки и начать новый эпизод в карьере.
https://proglib.io/sh/9qAhBenSNT
Увольнение – это всегда стресс. А в нынешнее тяжелое время и вовсе «конец света». Расскажем, как не опускать руки и начать новый эпизод в карьере.
https://proglib.io/sh/9qAhBenSNT
Изучить основы Java за 14 дней? По цене пиццы?!
Это реально!
Подключайтесь к нашему подготовительному курсу по Java-разработке.
Начинаем уже 16 августа 📚
Это реально!
Подключайтесь к нашему подготовительному курсу по Java-разработке.
Начинаем уже 16 августа 📚
#вопросы_с_собеседований
В чем разница между notify() и notifyAll()?
Дело в том, что «висеть» на методе
В чем разница между notify() и notifyAll()?
Дело в том, что «висеть» на методе
wait()
одного монитора могут сразу несколько потоков. При вызове notify()
только один из них выходит из wait()
и пытается захватить монитор, а затем продолжает работу со следующего после wait()
оператора. Какой из них выйдет - заранее неизвестно. А при вызове notifyAll()
, все висящие на wait()
потоки выходят из wait()
, и все они пытаются захватить монитор. Понятно, что в любой момент времени монитор может быть захвачен только одним потоком, а остальные ждут своей очереди. Порядок очереди определяется планировщиком потоков Java
.#вопросы_с_собеседований
Почему методы wait() и notify() вызываются только в синхронизированном блоке?
Монитор надо захватывать в явном виде (через
Почему методы wait() и notify() вызываются только в синхронизированном блоке?
Монитор надо захватывать в явном виде (через
synchronized-блок
), потому что методы wait()
и notify()
не синхронизированы.#вопросы_с_собеседований
Что такое livelock?
Реальный пример livelock, – когда два человека встречаются в узком коридоре и каждый, пытаясь быть вежливым, отходит в сторону, и так они бесконечно двигаются из стороны в сторону, абсолютно не продвигаясь в нужном им направлении.
Что такое livelock?
livelock
– тип взаимной блокировки, при котором несколько потоков выполняют бесполезную работу, попадая в зацикленность при попытке получения каких-либо ресурсов. При этом их состояния постоянно изменяются в зависимости друг от друга. Фактической ошибки не возникает, но КПД системы падает до 0. Часто возникает в результате попыток предотвращения deadlock.Реальный пример livelock, – когда два человека встречаются в узком коридоре и каждый, пытаясь быть вежливым, отходит в сторону, и так они бесконечно двигаются из стороны в сторону, абсолютно не продвигаясь в нужном им направлении.
#вопросы_с_собеседований
Как проверить, удерживает ли поток монитор определённого ресурса?
Метод
Как проверить, удерживает ли поток монитор определённого ресурса?
Метод
Thread.holdsLock(lock)
возвращает true
, когда текущий поток удерживает монитор у определённого объекта.Большой гайд. Пишем микросервисы на Java и Spring Boot, заворачиваем в Docker, запускаем на EKS, мониторим на Grafana.
https://habr.com/ru/post/682720/
https://habr.com/ru/post/682720/
Хабр
Большой гайд. Пишем микросервисы на Java и Spring Boot, заворачиваем в Docker, запускаем на EKS, мониторим на Grafana
Туториалы делятся на две больших категории: либо "как нарисовать сову", либо подробно расписанные тысячи шагов в формате "напиши туториал для дурака - и только дурак захочет его читать". К какой из...
⌛ Миф о 21 дне: как на самом деле формируются привычки
Проблема привить полезную привычку (или избавиться от вредной) касается каждого из нас. Рассказываем о самых популярных заблуждениях – смотрим фактам в лицо.
🔗 Основной сайт
🔗 Зеркало
Проблема привить полезную привычку (или избавиться от вредной) касается каждого из нас. Рассказываем о самых популярных заблуждениях – смотрим фактам в лицо.
🔗 Основной сайт
🔗 Зеркало
#вопросы_с_собеседований
На каком объекте происходит синхронизация при вызове static synchronized метода?
У синхронизированного статического метода нет доступа к
На каком объекте происходит синхронизация при вызове static synchronized метода?
У синхронизированного статического метода нет доступа к
this
, но есть доступ к объекту класса Class
, он присутствует в единственном экземпляре и именно он выступает в качестве монитора для синхронизации статических методов. Таким образом, следующая конструкция: class SomeClass {
public static synchronized void someMethod() {
//code
}
}
эквивалентна такой:public class SomeClass {
public static void someMethod(){
synchronized(SomeClass.class){
//code
}
}
}
☕ Учебник по Java: инкапсуляция на простых примерах
Защищаем пользовательскую информацию от ошибочных действий с помощью фундаментальной концепции ООП — инкапсуляции.
🔗 Основной сайт
🔗 Зеркало
Защищаем пользовательскую информацию от ошибочных действий с помощью фундаментальной концепции ООП — инкапсуляции.
🔗 Основной сайт
🔗 Зеркало
Станьте гуру кибербезопасности!
Сегодня компании становятся мишенью для атак со стороны хакеров в охоте за деньгами, информацией о готовящихся проектах и новых продуктах. Для проникновения хакеры используют различные методы: от вредоносных программ до специальной инженерии. А теперь представьте, что в 9 из 10 компаний отсутствуют специалисты по информационной безопасности! Представляете, насколько это популярное направление?
На курсе вы научитесь:
– основам веб-разработки;
– управлять базами данных;
– защищать сайты;
– организовывать пен-тесты;
– проверять сайты на защищенность;
– искать уязвимости.
Сейчас IT-специалисты нужны как никогда! Освойте профессию, без которой не обойдётся ни один бизнес!
🔥 Также для IT-специалистов действуют специальные плюшки от государства!
Подробности по ссылке: https://clc.to/aVAewQ
Сегодня компании становятся мишенью для атак со стороны хакеров в охоте за деньгами, информацией о готовящихся проектах и новых продуктах. Для проникновения хакеры используют различные методы: от вредоносных программ до специальной инженерии. А теперь представьте, что в 9 из 10 компаний отсутствуют специалисты по информационной безопасности! Представляете, насколько это популярное направление?
На курсе вы научитесь:
– основам веб-разработки;
– управлять базами данных;
– защищать сайты;
– организовывать пен-тесты;
– проверять сайты на защищенность;
– искать уязвимости.
Сейчас IT-специалисты нужны как никогда! Освойте профессию, без которой не обойдётся ни один бизнес!
🔥 Также для IT-специалистов действуют специальные плюшки от государства!
Подробности по ссылке: https://clc.to/aVAewQ