Java:如果在线程中使用的Runnable设置为null,会发生什么?

Hes*_*era 7 java multithreading runnable

说我做以下......

// MyRunnable是我声明的类,它实现了Runnable.

MyRunnable r = new MyRunnable();
Thread t = new Thread(r);
t.start();

r = null;
Run Code Online (Sandbox Code Playgroud)

将r设置为null有什么意义,就像我在上面的代码片段中一样?

Eng*_*uad 8

让我通过数字向您解释:

1-在

MyRunnable r = new MyRunnable();
Run Code Online (Sandbox Code Playgroud)

您正在创建MyRunnable主要实现Runnable接口的类的新实例:

在此输入图像描述

2-在

Thread t = new Thread(r);
Run Code Online (Sandbox Code Playgroud)

您正在创建一个新线程并通过传递引用r指向的对象:

在此输入图像描述

3-在

r = null;
Run Code Online (Sandbox Code Playgroud)

你正在删除r引用和MyRunnable对象之间的链接,Thread t正在使用它来运行线程:

在此输入图像描述


Jiv*_*ngs 6

没有影响.

线程已经开始了.无论如何,Thread对象将保留在引用上,因此它不会被收集垃圾t.