レンダリングはマルチスレッドで行う。スマホ画面には8~12タイルが表示される。 タイルのレンダリングは独立しているため、並列処理はやりやすい。 しかし、マルチポリゴンのレンダリングやパターンによるポリゴン塗りつぶしなどではワークエリアが必要となる。
これらのワークエリアを class TileToRenderer で管理している。
Tile にワークエリアを置けばプログラムは分かりやすいが、メモリ使用量が増大する。
public class RenderThread extends Thread { final static int NumThreads = 8; final static Thread[] threads = new Thread[NumThreads]; static boolean run; int thread_number; Renderer renderer; Map map; public RenderThread(Map map, int num) { this.map = map; this.thread_number = num; this.renderer = new Renderer(map, num); System.out.printf("RenderThead #%d ready.\n", num); } public void run() { run = true; while (run) { Tile tile = Tile.getRequest(map.src, map.zoom); if (tile != null) { tile.status = Tile.Status.busy; renderer.render(tile); tile.status = Tile.Status.ready; map.invalidate(); } else { try { Thread.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } } } } }