Java:可运行程序和方法的执行.它们应该在哪里?这有关系吗



如果我使用执行器提交任务,如下所示:

public SomeClass{  
     public void doSomething(){  
            Runnable r = new Runnable(){  
                 public void run(){  
                    callSomeMethod();  
                 }   
            }   
            executor.execute(r);  
    }  
}  

如果callSomeMethod是,会有什么不同吗

  • CCD_ 2的私有方法或
  • 以任何方式与并发问题相关的SomeClass方法

我指的不是访问变量。

有细微的差异,但对您来说应该无关紧要。

如果callSomeMethod()是私有的并在封闭(外部)类中声明,JVM规范将拒绝匿名Runnable对它的访问(私有方法只对声明类可见。内部类的概念对VM来说是未知的)。但是,根据语言规范,这是一个有效的调用。在这种情况下,java编译器发挥了一些神奇的作用——它生成了一个合成访问器(基本上是一个没有在源代码中声明,但纯粹由编译器生成的方法,以允许访问私有方法)。

对于私有的类成员也是如此。所以严格地说,这是有区别的,它会将生成的类文件放大一点点。

您应该选择在代码可读性方面最合适的形式。Runnable可以被视为方法(以及它的包含类)的一部分,因此如果callSomeMethod()对类声明类是私有的,那么它应该被声明为私有的。

至于callSomeMethod()最好放在哪里,请根据它的目的/作用(逻辑上希望在哪里找到代码执行的操作)来做出决定。

非常抽象地说(这就是你所要求的),没有区别。方法只是一段代码。当线程执行一个方法时,该方法的副本存在于线程的私有堆栈上,而不管代码实际定义在哪里。

访问共享变量和作用域是完全不同的讨论。

如果不访问任何变量,怎么会出现并发问题?

相关内容

  • 没有找到相关文章

最新更新