如果我使用执行器提交任务如下:
public SomeClass{
public void doSomething(){
Runnable r = new Runnable(){
public void run(){
callSomeMethod();
}
}
executor.execute(r);
}
}
如果 callSomeMethod
是
Runnable r
或 的私有(private)方法
SomeClass
的方法以任何方式与并发 问题相关?
我不是指访问变量。
最佳答案
有细微差别,但对您来说应该无关紧要。
如果 callSomeMethod() 是私有(private)的并在封闭(外部)类中声明,JVM 规范将拒绝匿名 Runnable 访问它(私有(private)方法仅对声明类可见。VM 不知道内部类的概念). 但是,根据语言规范,这是一个有效的调用。 java 编译器在这种情况下做了一些神奇的事情 - 它生成了一个合成访问器(基本上是一个未在源代码中声明的方法,但纯粹由编译器生成,以启用对私有(private)方法的访问)。
私有(private)的类成员也是如此。所以严格来说是有区别的,它会稍微放大生成的类文件。
您应该选择最适合代码可读性的形式。 Runnable 可以被视为方法的一部分(因此它的包含类),因此如果 callSomeMethod() 对于声明类的类是私有(private)的,则应将其声明为私有(private)。
至于将 callSomeMethod() 放在哪里最好,请根据它的目的是什么/它做了什么(您在逻辑上期望在哪里找到代码执行的操作)来做出决定。
关于Java:Runnable 和方法的执行。他们应该在哪里?这有关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9275111/