43

当我synchronized在接口中的方法上使用时,编译器会发出错误。你能告诉我为什么会这样吗?

(逻辑上)synchronized不能应用于方法的原因是interface什么?

我试图在此链接中通过 Threadpool 创建一个接口。帮助我在上面的代码中制作接口。

4

3 回答 3

81

因为synchronized是一个实现细节。该方法的一种实现可能需要使该方法同步,而另一种可能不需要它。调用者不关心方法是否同步。它不是合同的一部分,它说明该方法的作用。使用哪种同步技术(如果有的话)来履行合同是无关紧要的。

于 2013-01-25T11:27:17.007 回答
11

synchronized 是一个实现细节,不属于接口。

您可以拥有各种可能是线程安全的实现,但不涉及使用关键字同步。

您可能会考虑使用一些注释来表明实现应该是线程安全的意图。例如http://jetbrains.dzone.com/tips/concurrency-hot-try-jcip解释了如何使用 JCIP 并发注释。

顺便提一句。您可能希望熟悉 java 并发框架,而不是使用同步。如今,直接使用像同步这样的低级结构被认为是一种反模式。

于 2013-01-25T11:38:01.493 回答
5

简单的答案是同步是在谈论方法实现,但是在接口中所有方法都是抽象的,这意味着没有实现。

于 2014-05-25T17:54:38.520 回答