java - 我们可以有一个弱线程吗?

标签 java multithreading weak-references

我们能否对正在运行的线程进行弱引用以在 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/

相关文章:

java - 自定义 ListView 的自定义适配器。空指针异常

Java线程同步方法

python - 如何以可靠的方式跟踪 python 对象的实例?

java - 停止线程内的无限循环

java - 如何在java中对文本文件进行排序和排列以对行进行分组

java - Android - 创建线程时为假

c++ - 用于编译和运行多个服务器和客户端的 Bash 脚本 c

java - 如何检测一个对象只能弱可达?

java - 弱引用。当只剩下 WeakReferences 时,对象不会被删除

java - 确保java中对象的顺序