Всем привет! На эту тему видела уже много вопросов, и статей. И везде все равно все по-разному.
Надеюсь, что на этот вопрос смогут ответить люди, которые имеют практический опыт написания программ, т.к. теория во всех источникам немного разнится.
Абзац из оф. документации:
Язык программирования Java предоставляет несколько механизмов для связи между потоками. Самым основным из этих методов является синхронизация , которая реализуется с помощью мониторов. Каждый объект в Java связан с монитором, который поток может блокировать или разблокировать. Только один поток одновременно может удерживать блокировку на мониторе. Любые другие потоки, пытающиеся заблокировать этот монитор, блокируются до тех пор, пока они не смогут получить блокировку на этом мониторе. Поток t может блокировать конкретный монитор несколько раз; каждая разблокировка отменяет эффект одной операции блокировки.
Про мьютекс я читала, что это простейший тип синхронизатора — он гарантирует, что только один поток может одновременно выполнять критическую секцию компьютерной программы. Также про мьютекс я нашла целую серию статей от Oracle. Но я пока совсем не понимаю, что там происходит. Выглядит так, будто речь идет о мьютексе не как об абстракции, а как о чем-то конкретном
В общем, буду признательна, если поможете разобраться. Пока что я так понимаю, что мьютекс — это описание механизма (как абстрактный класс), а монитор — конкретная реализация. Но в интернете есть много противоречивых статей (в том числе и на джавараше), где пишется, что мьютекс — это состояние, а монитор — это код, реализующий работу с состоянием
Ada
1 уровень
В чем разница между мьютексом и монитором?
Обсуждается
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Денис Enterprise Java Developer
18 июня 2022, 09:42
В чем разница между мьютексом, монитором и семафором
0
Ada
18 июня 2022, 09:47
Эту статью я читала
0
Денис Enterprise Java Developer
18 июня 2022, 10:15
Тогда я не совсем понимаю какие могут быть вопросы :) Твоя задача сейчас - освоить технологию, а не сдавать экзамен в Оракл. Если сильно глубоко копать, можно до результата и не добраться.
Далеко не все серьезные специалисты могут похвастаться тем что они "понимают, что там происходит", еще меньшему количеству специалистов это реально нужно.
Когда ни будь, если тебе придется действительно оперировать технологией на таком низком уровне ты это разберешь, но до тех пор это больше трата времени.
Так например по ссылке на "серию статей от оракл" лежат примеры кода на С++ (скорее всего фактическая реализация работы с мьютексом) и комментарии к нему. Тебе правда нужно знать С++ что бы писать на Java? :)
0
Ada
18 июня 2022, 10:25
Ну я и хочу разобраться на базовом уровне) Эта статья была не первой, которую я прочитала, и она противоречила другим, поэтому я не принимаю ее за истину на 100%.
0