【问题标题】:Why synchronized method is not included in interface为什么接口中不包含同步方法
【发布时间】:2013-01-09 08:35:59
【问题描述】:

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

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

我试图在线程池in this link 上创建一个接口。 帮我在上面的代码中制作接口。

【问题讨论】:

    标签: java multithreading oop


    【解决方案1】:

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

    【讨论】:

    • 您的回答给我留下了深刻的印象。您能否详细说明答案的第二行。你能帮我在我的问题中提出的线程池(见链接)上制作接口吗?
    • 我不明白你想要实现什么,在你的另一个问题中,几位发帖人告诉你忘记这一点,改用标准线程池。无论如何,无论你想创建什么接口,都不要声明任何同步的方法。它不属于接口,而是属于接口的具体实现。
    • 实际上我编写了使用 Inbuild Class 的代码。但是我的老师要求我通过简单的数据结构来实现,以便更好地理解。这就是为什么我尝试在不使用内置类的情况下构建代码的原因。如果我删除 sychronized 关键字,那么代码会产生一些我不想要的问题,例如同时从列表中删除任务。所以告诉我这个场景的任何妥协路径,我应该遵循。
    • 如果你必须使用同步,那就去做吧。只是不要把它放在接口中的方法上,因为它不会编译。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-05-10
        • 1970-01-01
        • 1970-01-01
        • 2011-01-08
        • 2014-06-20
        • 1970-01-01
        • 2013-11-28
        相关资源
        最近更新 更多