我正在Java中尝试多线程,更具体地说是线程池。作为测试,我编写了一个应用程序,该应用程序使用多线程提高速度来简单地更改图像的颜色。但是,由于某种我不知道的原因,根据我如何设置此测试,我得到的结果是错误的。下面,我描述测试应用程序如何与完整的源代码一起工作。
任何帮助都非常欢迎!谢谢!
测试应用
我有一个用深蓝色初始化的400x300像素图像缓冲区,如下所示:
程序必须完全用红色填充它。
尽管我可以简单地遍历所有像素,并用红色依次为每个像素着色,但出于性能考虑,我还是决定利用并行性。因此,我决定用单独的线程填充每个图像行。由于行数(300行)比可用的CPU核心数大得多,因此我创建了一个线程池(包含4个线程),该线程池将消耗300个任务(每个任务负责填充一行)。
该计划的组织如下:
您可以在下面找到完整的源代码(我将将此代码称为Version 1):
import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;
import java.io.*;
class RGB {
RGB() {}
RGB(double r, double g, double b) {
this.r = r;
this.g = g;
this.b = b;
}
double r;
double g;
double b;
}
class RenderTask implements Runnable {
RenderTask(RGB[][] image_buffer, int row_width, int current_row) {
this.image_buffer = image_buffer;
this.row_width = row_width;
this.current_row = current_row;
}
@Override
public void …Run Code Online (Sandbox Code Playgroud)