解决方案 »

  1.   

    通过线程池优化些什么东西,你是操作太耗时么,操作是CPU密集型操作还是内存密集型还是硬盘io太多导致耗时?
      

  2.   

    使用多线程方式:public class BioProcessor implements Callable<Boolean> {
        private Biomini bio;    public BioProcessor(Biomini bio) {
            this.bio = bio;
        }    @Override
        public Boolean call() {
            // 转码操作...
            // 通过转码后得到对比模板...
            // 进行对比 ...        return true;// 最后返回对比结果true或false
        }
    }调用案例:public static void main(String[] args) {
            // 线程池参数自己研究下
            ExecutorService executor = new ThreadPoolExecutor(3, 10, 0L, TimeUnit.MILLISECONDS,
                    new LinkedBlockingQueue<Runnable>(200));        // 你的Biomini请求列表
            List<Biomini> bioList = new ArrayList<Biomini>();        // ... 经过一系列操作 ....        // 加入到线程池获得<Bio对象,Future>对应关系
            Map<Biomini, Future<Boolean>> futureMap = new HashMap<Biomini, Future<Boolean>>();
            for (Biomini bio : bioList) {
                futureMap.put(bio, executor.submit(new BioProcessor(bio)));
            }        // 都加入线程池后,再获取结果集
            for (Map.Entry<Biomini, Future<Boolean>> entry : futureMap.entrySet()) {
                // 如果匹配上的操作
                try {
                    if (entry.getValue().get()) {
                        // 通过entry.getKey()得到对应的Biomini对象
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (ExecutionException e) {
                    e.printStackTrace();
                }
            }
        }
      

  3.   

    是因为数据量大,一个个循环效率会有问题,所以考虑用线程池。
    瓶颈在哪,那一个方法耗时最长,消耗的资源是cpu还是硬盘io
      

  4.   

    是因为数据量大,一个个循环效率会有问题,所以考虑用线程池。
    瓶颈在哪,那一个方法耗时最长,消耗的资源是cpu还是硬盘io就是循环那,由于指纹特征集数据量大,字段常常都是byte数组有几十万,所以在对比的时候想用线程去对比
      

  5.   

    是因为数据量大,一个个循环效率会有问题,所以考虑用线程池。
    瓶颈在哪,那一个方法耗时最长,消耗的资源是cpu还是硬盘io就是循环那,由于指纹特征集数据量大,字段常常都是byte数组有几十万,所以在对比的时候想用线程去对比你还是没有回答我的问题,消耗的是cpu还是硬盘如果你是cpu消耗的比较多,多线程是没用的,如果是硬盘消耗比较多就可以用多线程
    我看你这比较的话,应该是消耗cpu的操作,你上多线程是没用的。要么优化算法,要么就多搞几台机器
      

  6.   

    把for循环内容用线程处理,任务过大,就把任务划分成十份或更小的粒度(比如取hashcode值与10做模运算,再存储在十个list里),多线程处理网上例子多得是!