Java线程 - 如何使hough变换运行得更快

时间:2015-01-12 04:40:18

标签: java android multithreading hough-transform

我正在尝试在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();
    }

}

2 个答案:

答案 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());}