【问题标题】:multithreading in java with exact number of threadsjava中具有确切线程数的多线程
【发布时间】:2017-08-30 07:34:27
【问题描述】:

我在 java 中有一个长度为 24 的线程数组。 我想运行它们,但如果我运行它们中的两个以上,我的计算机将被关闭。 我怎么能每时每刻只运行其中两个? 这是我写的,但它不起作用(运行此代码后我的计算机关闭了):

    File[] files = file.listFiles();
    Thread[] threads = new Thread[files.length];


    for (int i = 0; i < files.length; i++) {
            File a = files[i];
            threads[i] = new Thread(new Runnable() {
                @Override
                public void run() {
                    Function(a.toString());
                }
            });
    }

    Thread a = null,b = null;
    int i = 0;
    while (i < files.length) {
        if (!a.isAlive()) {
            a = threads[i];
            a.start();
            i++;
        }
        if (!b.isAlive()) {
            b = threads[i];
            b.start();
            i++;
        }
    }

【问题讨论】:

  • 您的计算机在尝试运行 3 个线程时关闭?这很奇怪......
  • 看起来它甚至在启动第一个线程之前就会与 NPE 一起崩溃。
  • 电脑关机?你确定吗?
  • 除了尝试只运行两个线程的奇怪原因。只需使用更高级别的AP Ilike docs.oracle.com/javase/7/docs/api/java/util/concurrent/…
  • 线程是你需要的错误抽象。您需要一个固定大小的线程池(例如 Executors 类提供的),您可以向其中提供 Runnables。 ExecutorService 是要走的路。

标签: java multithreading


【解决方案1】:

如果运行该代码会关闭您的计算机,那么您的计算机就坏了。

甚至不是线程,因为您的代码在第一次到达if (!a.isAlive()) { 时会引发 NullPointerException,因为此时 a 为空。

无论您编写的代码多么糟糕,Java 虚拟机都无法关闭您的 PC。在最坏的情况下,JVM 将崩溃或 Windows 将其关闭,但完全关闭清楚地表明您的硬件存在错误。

【讨论】:

    猜你喜欢
    • 2013-10-06
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    相关资源
    最近更新 更多