在多个线程中使用图形



我的 Ray 行进程序的帧率低于 3,我想如果我尝试多线程,那么每个线程可以完成一半的工作,而不是没有多线程。不幸的是,我对在 java 中使用线程一无所知,所以我的程序每次调用 render 方法时都会创建一个线程。这是渲染方法,它只是在一段时间循环中。

void render() {
BufferStrategy bs = this.getBufferStrategy();
if(bs == null){
this.createBufferStrategy(3);
return;
}
Graphics g = bs.getDrawGraphics();
g.setColor(Color.white);
g.fillRect(0, 0, WIDTH, HEIGHT);
Thread t1 = new Thread() {
public void run() {
for(int y = 0; y < HEIGHT; y++) {
for(int x = 0; x < WIDTH; x+=2) {
g.setColor(calculateColor(x,y));
g.drawLine(x, y, x, y);
}
}
}
};
Thread t2 = new Thread() {
public void run() {
for(int y = 0; y < HEIGHT; y++) {
for(int x = 1; x < WIDTH; x+=2) {
g.setColor(calculateColor(x,y));
g.drawLine(x, y, x, y);
}
}
}
};
t1.start();
t2.start();
g.dispose();
bs.show();
}

有人可以帮助我吗? 问候 GLS

一般来说,你的方法应该有效。 但是,看起来您的示例存在缺陷。 你告诉两个线程做基本上完全相同的事情? 我比较了run方法中的两个代码块,它们基本上是相同的。 唯一的区别是,一个从 0 开始x,另一个从 1 开始。

当我看到你的代码时,我的另一个问题是:Graphics线程安全的吗? 因为它被告知通过两个不同的线程调用setColordrawLine,可能同时调用。如果Graphics对象不是线程安全的,则会遇到问题,即使它运行得更快。

我环顾四周,找不到确认Graphics2D是否是线程安全的,所以我假设它不是。 你必须以不同的方式处理这个问题。

最新更新