Подтвердить что ты не робот

Почему синхронизированный метод не включен в интерфейс

Когда я использую synchronized для метода в интерфейсе, компилятор испускает ошибку. Можете ли вы сказать мне, почему это происходит?

В чем причина (логически), что synchronized не может применяться к методу на interface?

Я попытался создать интерфейс по Threadpool в этой ссылке. Помогите мне сделать интерфейс в моем предыдущем коде.

4b9b3361

Ответ 1

Потому что synchronized - деталь реализации. Одной реализации метода может потребоваться синхронизация метода, тогда как другому может быть не нужно. Вызывающему не волнует, синхронизирован ли этот метод. Это не часть контракта, в котором говорится, что делает этот метод. Какой метод синхронизации, если таковой имеется, используется для выполнения контракта, не имеет значения.

Ответ 2

synchronized - это деталь реализации и не принадлежит интерфейсу.

У вас могут быть всевозможные реализации, которые могут быть потокобезопасными, которые не связаны с использованием синхронизированного ключевого слова.

Вы можете использовать некоторую аннотацию, чтобы указать на намерение, что реализации должны быть потокобезопасными. Например, http://jetbrains.dzone.com/tips/concurrency-hot-try-jcip объясняет, как использовать аннотации JCIP concurrency.

BTW. Вместо использования синхронизации вы можете захотеть получить удовольствие от java-параллельной структуры. Использование низкоуровневых конструкций, таких как синхронизация напрямую, в наши дни считается немного анти-шаблоном.

Ответ 3

Простой ответ синхронизирован - речь идет о реализации метода, но в интерфейсе все методы являются абстрактными, что означает отсутствие реализации.