我要问的是,在运行时是否有办法限制JVM或Dalvik中线程可访问的CPU百分比?见例:
private void functionRunningInsideThread()
{
// Do something
// Lower access to CPU cycles
// Do something else (with access to lower CPU cycles)
// Remove CPU restrictions
return;
}
答案 0 :(得分:2)
简短回答:没有办法可靠地做到这一点,AFAIK。
更长的答案:这里至少有两个问题:
在传统的JVM中,除非第二个线程正在协作,否则一个线程暂停另一个线程的执行没有安全的方法。即它会定期检查是否应暂停。
很难监控线程使用的CPU时间百分比。理论上,您可以使用ThreadMXBean
API获取线程的总CPU使用率。但是:
但是,如果您愿意做一些粗略的准备,可以让线程使用ThreadMXBean.getCurrentThreadCPUTime
定期检查自己的CPU使用情况,并与使用System.getTimeMillis
测量的经过时间进行比较。如果线程发现它正在使用很多CPU,则只需调用Thread.sleep()
。
另见: