为什么我的线程程序只使用一个CPU?

unc*_*Lem 6 java cpu multithreading

我有一个程序执行长时间的计算,所以我想加快其性能.所以我此刻尝试启动3个线程,但java.exe仍然占用CPU使用率的25%(因此,只使用了一个CPU),即使我尝试使用.setPriority(Thread.MAX_PRIORITY);并设置java.exe实时优先级(24),它仍然存在.我尝试使用,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();
}
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 23

你实际上并没有使用线程.

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


Mic*_*rdt 11

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


Tom*_*Tom 6

首先,正如其他人所说,你并没有真正使用多线程.这是因为你正在调用run()方法,该方法最终在调用线程中完成工作.

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

最大化进程效率的最佳方法是尝试使所有线程执行大量相同的工作,并尝试阻止它们阻塞.也就是说,为了使应用程序高效运行,您的工作就是"平衡"工作负载.

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

编辑:我沉迷于分号.