По какой причине «синхронизированный» не разрешен в интерфейсных методах Java 8?

В Java 8 я могу легко написать:

interface Interface1 {
    default void method1() {
        synchronized (this) {
            // Something
        }
    }

    static void method2() {
        synchronized (Interface1.class) {
            // Something
        }
    }
}

Я получу полную семантику синхронизации, которую я могу использовать и в классах. Я не могу, однако, использоватьsynchronized модификатор на объявлениях метода:

interface Interface2 {
    default synchronized void method1() {
        //  ^^^^^^^^^^^^ Modifier 'synchronized' not allowed here
    }

    static synchronized void method2() {
        // ^^^^^^^^^^^^ Modifier 'synchronized' not allowed here
    }
}

Теперь можно утверждать, что два интерфейса ведут себя одинаково, за исключением того, чтоInterface2 устанавливаетконтракт наmethod1() и наmethod2()что немного сильнее чем чтоInterface1 делает. Конечно, мы могли бы также утверждать, чтоdefault реализации не должны делать какие-либо предположения о конкретном состоянии реализации, или что такое ключевое слово просто не потянет его вес.

Вопрос:

По какой причине экспертная группа JSR-335 решила не поддерживатьsynchronized по интерфейсным методам?

Ответы на вопрос(1)

Ваш ответ на вопрос