我正在尝试在Java中实现hough变换以查找图像中的所有行。由于该过程本身花费了太多时间,我决定将其分布在多个线程中。然而,在这样做之后,这个过程并没有变得更快。我究竟做错了什么?是for
循环等待每次迭代完成input_elements
的原因吗?
for
循环
latch = new CountDownLatch(thread_arr.length);
for (int i=0; i<border_que.arr.length; i++) {
thread_arr[i].input_elements(border_que.arr[i][0], border_que.arr[i][1]);
}
try {
latch.await();
} catch (Exception e) {System.out.println(e.getCause());}
主题代码
class RowAndThetaThread implements Runnable{
private int x_0;
private int y_0;
public void run() {
// find rho and theta and push them to an array
}
public void input_elements(int x, int y) {
x_0 = x;
y_0 = y;
this.run();
}
}
答案 0 :(得分:1)
你实际上并没有使用多个线程。
Thread
个对象并不特别。当你在一个方法上调用一个方法包括run
时,该方法仍在当前线程上执行。
有一个start
方法,(在任何现有线程上调用时)在新线程上调用run
。这是在Java中启动新线程的唯一方法。
答案 1 :(得分:1)
你可以尝试这样的smth,没有任何课程:
latch = new CountDownLatch(thread_arr.length);
for (int i=0; i<border_que.arr.length; i++)
{
//added
static int x = border_que.arr[i][0];
static int y = border_que.arr[i][1];
Thread thread = new Thread(new Runnable(){
@Override
public void run() {
try {
//thread action here
int x_0 =x;
int y_0 =y;
} catch (Exception e) {
//report thread exeception etc
}
}
});
thread.start();
//end added
}
try {
latch.await();
} catch (Exception e) {System.out.println(e.getCause());}