【发布时间】:2016-05-13 06:36:51
【问题描述】:
所以我有这个代码:
for(Runnable loadTask : mMeshLoadMap.values())
{
if(loadTask != null)
{
loadTask.run();
loadTask = null;
}
}
我的问题是永远不会执行loadTask = null 语句,Android Studio 说“从未使用过分配给 loadTask 的值“null””...
另外,当我在该行设置断点时,调试器永远不会到达它。
它可以到达loadTask.run(),但不能到达loadTask = null
而且我确信loadTask.run() 不会阻塞太久
【问题讨论】:
-
不,我想要同步执行,我不想为我的可运行对象启动线程
-
那你为什么要使用 Runnable 接口呢? “Runnable 接口应该由其实例打算由线程执行的任何类实现。”
-
我认为编译器实际上可能会删除
loadTask = null;语句,因为它根本不做任何事情。我不确定 JLS 是否允许这样做,但某些语言允许编译器执行几乎任何操作,只要程序的可观察效果不变。由于带有断点的行不会以任何方式影响可观察到的效果,我不明白为什么编译器不应该删除它。 -
@DavidS 我使用 Runnable 作为“函数”对象。 Runnable 不仅可以用于线程,还可以用于任何事情。
-
好吧,我不知道这是否合适,但我知道即使是 Android API 也使用 runnables 来对同步事件进行排队,例如:developer.android.com/reference/android/opengl/…(我实际上从那里得到了这个想法!)