为什么同步方法不包含在接口中

时间:2013-01-25 11:24:19

标签: java multithreading oop

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

synchronizedinterface无法应用{{1}}的原因(逻辑上)是什么原因?

我尝试通过Threadpool in this link创建一个接口。 帮我在上面的代码中创建Interface。

3 个答案:

答案 0 :(得分:73)

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

答案 1 :(得分:11)

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

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

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

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

答案 2 :(得分:5)

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