6

我有一个执行长时间计算的程序,所以我想加快它的性能。所以我现在尝试启动 3 个线程,但java.exe仍然占用了 25% 的 CPU 使用率(因此,只使用了一个 CPU),即使我尝试使用并设置实时.setPriority(Thread.MAX_PRIORITY);优先级(24),它仍然存在。java.exe我尝试使用RealtimeThread,但似乎它的工作速度更慢。如果每个线程都分配给一个处理器,并且总CPU使用率增加到75%,那将是完美的,但我不知道该怎么做。这就是我的代码现在的样子:

Thread g1 = new MyThread(i,j);
g1.setPriority(Thread.MAX_PRIORITY);
g1.run();
Thread g2 = new MyThread(j,i);
g2.setPriority(Thread.MAX_PRIORITY);
g2.run();
Thread g3 = new MyThread(i,j);
g3.setPriority(Thread.MAX_PRIORITY);
g3.run();
if (g1.isAlive()) {
        g1.join();
}
if (g2.isAlive()) {
        g2.join();
}
if (g3.isAlive()) {
        g3.join();
}
4

3 回答 3

23

您实际上并没有使用线程。

你需要打电话.start(),不是.run()

于 2012-05-08T21:48:47.013 回答
11

这与 CPU 无关——您实际上并没有启动 3 个线程,而是在主线程上运行所有内容。要启动一个线程,调用它的start()方法,而不是run().

于 2012-05-08T21:49:35.390 回答
6

首先,正如其他人所建议的那样,您并没有真正使用多个线程。这是因为您正在调用 run() 方法,该方法最终在调用线程中完成工作。

现在,为了解决您的其余问题,我认为这是指如何最大限度地提高多线程进程的效率。这不是一个简单的问题,但我会给你一些基础知识。(其他人,请随意插话。)

最大限度地提高进程效率的最佳方法是尝试使所有线程执行大致相同的工作量,并尽量防止它们阻塞。也就是说,“平衡”工作负载以使应用程序高效运行是您的工作。

通常,您不能分配线程在特定的 CPU 内核上运行;这通常是操作系统和 CPU 本身的工作。操作系统调度进程(使用您提供的优先级),然后 CPU 可以在指令级别进行自己的调度。除了设置优先级之外,其余的调度完全不受您的控制。

编辑:我沉迷于分号。

于 2012-05-08T21:53:33.710 回答