gpt4 book ai didi

java - 在多线程中使用图形

转载 作者:行者123 更新时间:2023-12-01 19:13:47 25 4
gpt4 key购买 nike

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

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 是否是线程安全的,所以我假设它不是。您必须以不同的方式解决这个问题。

关于java - 在多线程中使用图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59442704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com