Почему синхронизированный метод не включен в интерфейс
Когда я использую synchronized
для метода в интерфейсе, компилятор испускает ошибку. Можете ли вы сказать мне, почему это происходит?
В чем причина (логически), что synchronized
не может применяться к методу на interface
?
Я попытался создать интерфейс по Threadpool в этой ссылке.
Помогите мне сделать интерфейс в моем предыдущем коде.
Ответы
Ответ 1
Потому что synchronized
- деталь реализации. Одной реализации метода может потребоваться синхронизация метода, тогда как другому может быть не нужно. Вызывающему не волнует, синхронизирован ли этот метод. Это не часть контракта, в котором говорится, что делает этот метод. Какой метод синхронизации, если таковой имеется, используется для выполнения контракта, не имеет значения.
Ответ 2
synchronized - это деталь реализации и не принадлежит интерфейсу.
У вас могут быть всевозможные реализации, которые могут быть потокобезопасными, которые не связаны с использованием синхронизированного ключевого слова.
Вы можете использовать некоторую аннотацию, чтобы указать на намерение, что реализации должны быть потокобезопасными. Например, http://jetbrains.dzone.com/tips/concurrency-hot-try-jcip объясняет, как использовать аннотации JCIP concurrency.
BTW. Вместо использования синхронизации вы можете захотеть получить удовольствие от java-параллельной структуры. Использование низкоуровневых конструкций, таких как синхронизация напрямую, в наши дни считается немного анти-шаблоном.
Ответ 3
Простой ответ синхронизирован - речь идет о реализации метода, но в интерфейсе все методы являются абстрактными, что означает отсутствие реализации.