我们能否对正在运行的线程进行弱引用以在 CPU 性能低下终止?
我的意思是,这样的事情行得通吗?
WeakReference<Thread> ref = new WeakReference<Thread>(new Thread(){
public void run(){
while(true){ /* your code */ }
}
});
那样的话,我希望线程的执行优先级较低,我的意思是当 CPU 性能低且 CPU 完全占用时,线程的执行会自动终止。
有些线程的优先级不高,CPU性能低下应该中断和终止。
最佳答案
这无法通过您描述的方式通过弱引用来实现。本文很好地定义了弱引用,因此您可能对此感兴趣:weak reference
为此,您需要解决两个问题,一个简单,一个不那么简单。 我不认为标准 Java API 中有任何东西可以做到这一点。
简单的 - 终止“低”优先级线程:
实现所需行为的简单方法是根据您的应用程序规则,将低优先级的 Runnable
实例注册到某种状态管理器。这些实例将实现某种stop()
,以及可选的pause()
和resume()
行为,并将其暴露给状态管理器可以根据某种信号停止所有实例。为此,您可以简单地检查 run()
循环中的一些 volatile boolean 值。
不是那么容易 - 确定 CPU 使用率
使用 JNI 或某种第三方库,例如以下之一: How to monitor the computer's cpu, memory, and disk usage in Java?
您可以通过第 2 步定期检查资源消耗情况,如果您确定有问题,请通知状态管理器关闭低优先级任务。
关于java - 我们可以有一个弱线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39097254/