我需要从服务器检索一张巨大的图片,但服务器不能这样做,因为图片太大了。我可以给出“坐标”,以便检索那张图片的一小部分。因此,我将图片分成 100 个图块,然后将 10 个图块附加到一行,然后附加每一行。当我按顺序执行时,效果很好。现在我下载 10 个图块 -> 将它们附加到一行 -> 下载接下来的 10 个图块 -> 将它们附加到一行 -> 将第二行附加到第一个 -> 下载接下来的 10 个图块等(简化):
public static void downloadWholeImage(){
int xcoord=0;
int ycoord=0;
//outer loop for each row
for(int i = 0; i<10; i++){
//all tiles of a row are stored here
BufferedImage[] tilesForRow = new BufferedImage[10];
//inner loop for each tile of a row
for(int j = 0; j<10; j++){
//downloads the image
BufferedImage tile = downloadImage(xcoord,ycoord);
//removes all black pixels of the image
BufferedImage[j] = removeBlackColor(tile);
//increments xcoord so the next tile
xcoord++;
}
//each row gets appended on top of the first row
if(i==0){
BufferedImage firstRow = appendTilesToRow(tilesForRow)
} else{
BufferedImage actualRow = appendTilesToRow(tilesForRow)
}
firstRow = appendActualToFirst(firstRow, actualRow);
//incrementing ycoord for next tile
ycoord++;
}
writeImage(path,firstRow);
}
但是由于这些行非常大,因此将它们相互附加需要很长时间。当它们被附加时,我认为我可以创建一个下载其他图块的线程。这就是问题所在。我不习惯同时编程。我知道它在技术上是如何完成的(实现 Runnable 等),但我应该如何设计它?我有在另一个线程中运行的想法,downloadImage(xcoord, ycoord)
但这导致了将removeBlackColor(tile)
. 还是在线程中或线程完成后?..谁应该等待什么(加入)?我希望它没有那么混乱。如果您在某处需要更多说明,请告诉我。