class drawSin implements Runnable{
@Override
public void run() {
final double SPLIT = 0.01;// 角度的分割
final int COUNT = (int) (2 / SPLIT);// 2PI分割的次数,也就是2/0.01个,正好是一周
final double PI = Math.PI;
final int interval = 100;// 时间间隔
long[] busy = new long[COUNT];//线程运行时间
long[] idle= new long[COUNT];//线程休眠时间
int half = interval / 2;
double x = 0.0;
for (int i = 0; i < COUNT; i++) {
busy[i] = (long) (half + (Math.sin(PI * x) * half))/2;
idle[i] = interval - busy[i];
x += SPLIT;
}
long start = 0;
int j = 0;
while (true){
j = j % COUNT;
start = System.currentTimeMillis();
while (System.currentTimeMillis() - start < busy[j]) ;
try {
Thread.sleep(idle[j]);
} catch (InterruptedException e) {
e.printStackTrace();
}
j++;
}
}
}
public class cpuSin {
public static void main(String[] args) throws Exception {
Runtime runtime = Runtime.getRuntime();//获得当前系统的CPU数量,根据这个数值创建对应数量的线程
ExecutorService executorService = Executors.newFixedThreadPool(runtime.availableProcessors());
for (int i = 0;i < runtime.availableProcessors();i++){//每个核心都上一个线程
executorService.execute(new drawSin());
}
executorService.shutdown();
}
}
分布与并行计算—用任务管理器画CPU正弦曲线(Java)
最新推荐文章于 2021-03-05 13:31:20 发布