java - cpu使用多线程java

标签 java multithreading cpu

public class Main {
    public static void main(String[] args) {
        LinkedList<Th> myThreads = new LinkedList<>();

        for (int i = 0; i < 100; i++) {
            myThreads.add(new Th());
            myThreads.get(i).start();
        }
    }
}

public class Th extends Thread {

    int myInt;

    @Override
    public void run() {
        while(true) {
           doSomething();
        }
    }

    private void doSomething() {
        switch (myInt) {
            case 0: {
               // System.out.println("comment part");
                break;
            }
            case 2:{
                System.out.println("2");
                break;
            }
        }
    }
}

你好, 我在 java 中使用简单的多线程时遇到问题。 当我运行这个程序时,cpu 使用率突然达到 100%,我的电脑崩溃了,我无法停止该程序。 在这里你可以看到代码。 当我取消评论评论部分时,一切正常!但我需要在不在控制台中打印任何内容的情况下解决这个问题。 附言。我已经知道案例 2 代码块永远不会被编译。

最佳答案

这段代码本身并没有错。 是您的机器无法处理您要求它完成的工作量。

您的代码生成 100 个线程,这些线程会将一些内容打印到标准输出(成本高昂的操作,因为您必须要求操作系统执行此操作)尽可能快 .即使对于现代机器来说,这也是一项大量工作。

打印完消息后,尝试主动放弃 CPU 一段时间,然后再 hibernate 。

switch (myInt) {
            case 0: {
                System.out.println("message");
                Thread.sleep(50);
                break;
            }

另外,100%使用 CPU 并没有错。您只是在使用所有可用的计算能力。这是一件好事,尤其是在科学计算方面。

关于java - cpu使用多线程java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45079583/

相关文章:

java - 通过 Java 传输到 Node.js 来加密和解密数据

java - java 如何知道 lambda 参数的类型?

java - 与 System.out 关联的 Java 线程的奇怪行为

multithreading - 使用 ZeroMQ 套接字时,我可以从一个线程发送()并从另一个线程接收()到同一个套接字吗?

multithreading - Runtime.getRuntime().availableProcessors() 不返回可用内核

java - 在循环中启动和关闭线程好吗?

java - 如何检查Java Runtime Enviroment中是否存在具有指定类名的重复类?

multithreading - IOCP多线程服务器和引用计数类

时钟、rdtsc 和 CLOCKS_PER_SEC

c++ - CPU 设备上的 OpenCL - 幕后发生了什么?