在线程完成它的工作之后,我应该显式地将线程引用设置为null还是没有必要?如果我想将它设置为null,那么我应该在代码中执行此操作?线程完成后,我应该明确地将线程引用设置为null吗?
我应该使用thread.isalive
标志检查线程是否存活,如果线程没有活动,则将其设置为空?
在线程完成它的工作之后,我应该显式地将线程引用设置为null还是没有必要?如果我想将它设置为null,那么我应该在代码中执行此操作?线程完成后,我应该明确地将线程引用设置为null吗?
我应该使用thread.isalive
标志检查线程是否存活,如果线程没有活动,则将其设置为空?
在线程 完成它的工作或它没有必要之后,我应该明确地设置线程引用为null吗?
个人而言,我不打扰。在某些情况下,将对象引用显式设置为null真的很重要。不管类型如下:
这些是我能想到的。也许还有更多,但可能并不多。这里的共同点是变量引用了一个消耗大量内存的对象。受管理的Thread
对象本身不会消耗大量内存,因此我无法想象将Thread
类型的变量设置为null会为您完成很多操作,无论它是如何使用的。大多数资源在线程启动时分配,然后在线程结束时释放资源。
我应该检查,如果线程是活着还是不使用thread.isalive标志和 然后将其设置为null,如果它不是活着。
我更喜欢用Thread.Join
来测试并等待线程完成。事实上,我有从来没有使用Thread.IsAlive
任何有用的......有史以来。
的GC实际上是足够聪明,处理本地对象的引用之前的方法结束,如果它能够检测到基准不再使用。
你应该把一个线程像任何其他对象:
保持基准只要只因为你需要它(例如用于Join()
)。
当你确实有一个长时间参考线程(即在一个静态字段中),那么当你不再需要它时,你应该将它设置为null
。但最好不要有这样的变数。
这与知道原始海报中引用的变量是相关的。局部变量或实例字段(在什么对象上)或静态字段? –
@JeppeStigNielsen这是一个静态字段 – Charu
@Charu - 然后尝试重新设计并摆脱它。 –
为什么你想把参数设置为null? –
@DavidHeffernan这就是我问的问题? – Charu