Например, в данном коде,
@Singleton
public class MyExecutor {
ExecutorService executorService;
public void execute(Runnable runnable) {
executorService.submit(runnable);
}
}
class A {
public void a(String x) {
// do something
}
MyExecutor executor;
// Injected via DI, always is same object
A(MyExecutor executor) {
this.executor = executor;
}
public void run() {
executor.execute(() -> a("Whatever"));
}
}
Итак, мой вопрос: я предполагаю, что я очень часто создаю A
s и вызываю их a.run()
, а затем забываю об этом, будет ли A
объект не будет собран GC до тех пор, пока MyExecutor
не закончит с ними обработку?
Мне кажется, что так и должно быть, иначе MyExecutor
когда-нибудь узнает, какой экземпляр выполнить?
Таким образом, в основном мой вопрос заключается в том, является ли объект вызывающего объекта, передающий ссылку на метод экземпляра, как Runnable
/ Callable
/ Consumer
.. и т. Д. Безопасным для GC до переданного Runnable
/ Callable
/ Consumer
кто-то держит ссылку на них?