Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么不';在使用线程池时,您看不到性能的提高吗?_Java_Multithreading_Threadpool_Raytracing_Raycasting - Fatal编程技术网

Java 为什么不';在使用线程池时,您看不到性能的提高吗?

Java 为什么不';在使用线程池时,您看不到性能的提高吗?,java,multithreading,threadpool,raytracing,raycasting,Java,Multithreading,Threadpool,Raytracing,Raycasting,我编写了一个2D光线投射器,可以将光线绘制到任何java形状,包括: Line2D、矩形2D、椭圆E2D、四曲线2D和立方体Curve2D 它背后的数学实际上非常复杂和密集,特别是对于四边形和立方体,所以我设置了一个线程池。 我制作了一个execcutionservice“exec”,它根据可用内核的数量使用固定的线程数 然后,我将负责每个形状的代码块更改为静态可运行代码。 通过raycaster方法,我将执行runnables,然后调用exec.shutdown()。 最后,id创建一个whi

我编写了一个2D光线投射器,可以将光线绘制到任何java形状,包括:

Line2D、矩形2D、椭圆E2D、四曲线2D和立方体Curve2D

它背后的数学实际上非常复杂和密集,特别是对于四边形和立方体,所以我设置了一个线程池。 我制作了一个execcutionservice“exec”,它根据可用内核的数量使用固定的线程数

然后,我将负责每个形状的代码块更改为静态可运行代码。 通过raycaster方法,我将执行runnables,然后调用exec.shutdown()。 最后,id创建一个while循环,直到exec.isTerminated返回true才退出

这确保所有线程在继续之前都已执行完毕

现在,从我在网上看到的情况来看,这是一种流行的方法,但我没有看到改进的结果。 即使不是更糟,也总是一样的。
有没有一种正确的方法可以使用线程池来实际提高效率,而不是增加开销?

正如@Adam Siemion所说,首先要确保你的电脑不容易受到CPU的限制,并且你有一个多核CPU。否则你无论如何也不能更快

其次,不要动态创建线程。将线程池与任务队列一起使用(请参阅java.util.concurrent中的ExecutorService等)。如果您经常为大量的小任务创建线程,那么线程的创建和清理将占用相当多的时间

第三,我建议确保线程同时结束,使用诸如CyclicBarrier或CountDownLatch之类的工具,而不是独自在线程内等待


如果上述方法不能解决您的问题,请在这里发布一些代码。另一个猜测是你有一些共享资源的串行依赖性,例如绘画线程等。

正如@Adam Siemion所说,首先要确保你的电脑不容易受到CPU的限制,并且你有一个多核CPU。否则你无论如何也不能更快

其次,不要动态创建线程。将线程池与任务队列一起使用(请参阅java.util.concurrent中的ExecutorService等)。如果您经常为大量的小任务创建线程,那么线程的创建和清理将占用相当多的时间

第三,我建议确保线程同时结束,使用诸如CyclicBarrier或CountDownLatch之类的工具,而不是独自在线程内等待


如果上述方法不能解决您的问题,请在这里发布一些代码。另一个猜测是您有一些共享资源串行依赖项,例如绘制线程等。

可能您的while循环正在使用大量的CPuplase post代码!也许您的机器中有一个CPU核心,而您的程序已经使用了100%的CPU功率?也许您的while循环正在使用大量的cpuPlease post代码!也许您的机器中有一个CPU核心,而您的程序已经使用了100%的CPU功率?