CPU占有率达到100%
我们先通过命令行窗口获取CPU的核心数
CPU的核心数为CPU实际的物理核心数量 现在普遍的电脑都是16核
拥有16个独立的运算单元
我们用循环创建16个线程 进去占用这些运算单元执行占用CPU资源的代码
就会使CPU的利用率达到100%
public class Main { public static void main(String[] args) { int numOfThreads = Runtime.getRuntime().availableProcessors(); for (int i = 0; i < numOfThreads; i++) { Thread thread = new Thread(new CpuTask()); thread.start(); // 启动线程 } } static class CpuTask implements Runnable { @Override public void run() { while (true) { // 在这里执行一些消耗CPU的操作 double x = Math.random() * Math.random(); } } } }
我试了十几遍 总结概括就是
无限接近于宕机但是不宕机
勉强能操作 但是会一卡一卡的
我电脑的snipaste就用不了了
试试就死机
无限创建线程去抢夺CPU的执行权
在去执行一些消耗CPU的操作
让产生的每一个进程都去占用CPU 最终导致CPU被填满
public class Main { public static void main(String[] args) { while(true){ Thread thread = new Thread(new CpuTask()); thread.start(); } } static class CpuTask implements Runnable { @Override public void run() { while (true) { double x = Math.random() * Math.random(); } } } }
这里就直接无法进行任何操作了
外接键盘开任务处理器也不行
只能长按电源键重启(伤电脑 心疼死我了)
但是这样就不会
public class Main { public static void main(String[] args) { int numOfThreads = Runtime.getRuntime().availableProcessors(); for (int i = 0; i < numOfThreads; i++) { Thread thread = new Thread(new CpuTask()); thread.start(); // 启动线程 } } static class CpuTask implements Runnable { @Override public void run() { while (true) { // 在这里执行一些消耗CPU的操作 double x = Math.random() * Math.random(); System.out.println("程序正在运行"); } } } }
尽管每个线程都在执行计算任务,但由于缺乏同步和协调,可能会导致一些线程在某个时刻被阻塞或者处于等待状态,从而无法充分利用CPU资源。
而这里的等待输出 一个线程抢到了CPU的执行权去输出 会使其他的线程阻塞再外面
把这个代码分享给你的好兄弟 他们一定会很感激你