Семафоры безопасны для потоков, как объяснено в javadoc: Эффекты согласованности памяти: действия в потоке до вызова метода «выпуска», такие как выпуск, предшествующий действиям, следующим за успешный метод «получения», такой как получение в другом потоке. Большинство операций над объектами в java.
Предотвращают ли семафоры гонки?
Нет, операции блокировки происходят атомарно. Все заблокированные области не будут выполняться атомарно. И помните, потоки имеют общее адресное пространство и все привязаны к процессу.
Является ли использование потокобезопасным?
Объект MessageService является фактически неизменяемым, поскольку его состояние не может измениться после его создания. Следовательно, он потокобезопасен. Более того, если MessageService на самом деле является изменяемым, но несколько потоков имеют к нему доступ только для чтения, он также является потокобезопасным.
Является ли потокобезопасным и синхронизированным?
Thread safe означает: метод становится безопасным для доступа к нескольким потокам без каких-либо проблем одновременно. synchronized ключевое слово является одним из способов достижения «поточности». Но помните: на самом деле, когда несколько потоков пытаются получить доступ к синхронизированному методу, они следуют порядку, поэтому доступ становится безопасным.
Являются ли семафоры честными?
Как правило, семафоры, используемые для управления доступом к ресурсам, должны быть инициализированы как честные, чтобы гарантировать, что ни один поток не останется без доступа к ресурсу. Когда используешьсемафоров для других видов управления синхронизацией, преимущества в пропускной способности от несправедливого упорядочения часто перевешивают соображения справедливости.