class Hello {
public Thread create(int index){
return new Thread(
new Runnable() {
@Override
public void run() {
if(index == 1){
System.out.println("index=1");
}else{
System.out.println("hello");
}
}
}
);
}
public static void main(String[] args) {
Hello hello = new Hello();
Thread thread = hello.create(1);
thread.run();
}
}
结果上是可以运行的。
但我不太理解,Thread thread = hello.create(1);
这一步得到的thread
,内部难道是这样:
{
int index = 1;
...
}
的? 还是
{
Runnable target = { int index = 1; ....}
....
}
这样的?
就是从理论上来说作为create(int)
的参数传入的index
和它的值,应该在函数调用结束后便销毁,但实际上new
出来的thread
记录了这个值,它是怎么记录的?有相关的官方文档来说明这一情况下的规则么?
另外,如果这里使用 java8 的 lambda 来写,其记录时的行为一样么?
谢谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.