Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么接口中不包括同步方法_Java_Multithreading_Oop - Fatal编程技术网

Java 为什么接口中不包括同步方法

Java 为什么接口中不包括同步方法,java,multithreading,oop,Java,Multithreading,Oop,当我对接口中的方法使用synchronized时,编译器会发出一个错误。你能告诉我为什么会这样吗 synchronized无法应用于接口上的方法的原因(逻辑上)是什么 我试图在Threadpool上创建一个接口。 请帮助我在上面的代码中创建接口。因为synchronized是一个实现细节。该方法的一个实现可能需要使该方法同步,而另一个实现可能不需要它。调用方不关心该方法是否同步。它不是合同的一部分,合同规定了方法的作用。哪种同步技术(如果有的话)用于履行合同是不相关的。同步是一个实现细节,不属于

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

synchronized
无法应用于
接口上的方法的原因(逻辑上)是什么

我试图在Threadpool上创建一个接口。
请帮助我在上面的代码中创建接口。

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

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

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

您可以考虑使用一些注释来指示实现应该是线程安全的意图。例如,解释了如何使用JCIP并发注释


顺便说一句,您可能希望熟悉java并发框架,而不是使用synchronized。使用低级构造(如直接同步)被认为有点反模式。

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

我对你的答案印象深刻。你能详细说明你答案的第二行吗。你能帮我在我的问题中提出的线程池(见链接)上创建接口吗?我不明白你想要实现什么,在你的另一个问题中,有几张海报告诉你不要考虑这个,而是使用标准线程池。无论如何,无论您想要创建什么接口,都不要声明任何同步的方法。它不属于接口,而是接口的具体实现。但是我的老师让我通过简单的数据结构来实现,以便更好地理解。这就是为什么我试图在不使用内置类的情况下构建代码。若我删除了同步化的关键字,那个么代码会产生一些我不想要的问题,比如同时从列表中删除任务。所以,请告诉我此场景的任何折衷路径,我应该遵循。如果您必须使用synchronized,请执行此操作。只是不要把它放在接口中的方法上,因为它不会编译。