2 as944985356 as944985356 于 2014.08.27 09:27 提问

线程池循环出错,关于java线程池

由于培训机构出生,对一些没常用的技术都没去学习与理解
今公司要要我做个指纹验证,用到线程池,上网也找了点资料,自己写了一下,就是循环不对。
麻烦大家给我看看吧。。。。

enter code here

//es是个ExecutorService全局变量
es = new threadPoolExecutor(5, 20, 20, TimeUnit.SECONDS,
new SynchronousQueue());

        } catch (Exception e) {
            e.printStackTrace();
        }

        for (; j < list.size(); j++) {
            System.out.println("====================================="+j);
        runMap = new HashMap<String, Object>();
        runMap.put("featureCode", list.get(j).getFeatureCode());
        runMap.put("biominiId", list.get(j).getId());
        runMap.put("userId", list.get(j).getUserId());

// es.submit(new myThread());
es.execute(new Runnable() {
public void run() {

                try {
                    Thread.sleep(2000);
                    Biomini biominis = new Biomini();
                    biominis.setFeatureCode(runMap.get("featureCode").toString());
                    DPFPTemplate template = null;
                    // byte[] curFinger =
                    // getBiominiStringToByte(biomini.getFeatureCode());
                    System.out.println("数据库:" + runMap.get("featureCode").toString()
                            + "----------" + j);
                    System.out.println("请求值:"
                            + getBiominiByteToString(featureSet.serialize()));

                    byte[] curFinger = getBiominiStringToByte(biominis
                            .getFeatureCode());
                    template = DPFPGlobal.getTemplateFactory().createTemplate(
                            curFinger);
                    if (template != null) {
                        DPFPVerificationResult result;
                        result = matcher.verify(featureSet, template);
                        if (result.isVerified()) {
                            System.out.printf("匹配到用户: %s, FAR achieved:",
                            // biominiService.queryBiominiById(Integer.parseInt(biomini.getUserId())),
                                    // (double)result.getFalseAcceptRate()/DPFPVerification.PROBABILITY_ONE);
                                    biominiService.queryBiominiById(Integer
                                            .parseInt("3213")), (double) result
                                            .getFalseAcceptRate()
                                            / DPFPVerification.PROBABILITY_ONE);
                            // 停止
                            System.out.println("线程停止");
                            es.shutdownNow();
                            return;
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

// 线程池设置
class threadPoolExecutor extends ThreadPoolExecutor {

public threadPoolExecutor(int corePoolSize, int maximumPoolSize,
        long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) {
    super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
}

protected void beforeExecute(Thread t, Runnable r) {
    System.out.println(t.getName());
}

protected void afterExecute(Runnable r, Throwable t) {
}

}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
利用线程池进行for循环处理——线程池
    项目之前使用for循环单线程查询缓存效率低下,就萌生了利用线程池进行for循环处理的想法。将每次循环查询缓存的线程利用线程池进行并发处理,可大大降低系统处理时间。下面是我写的测试类:package com.sinoway.cisp.test; import java.util.ArrayList; import java.util.List; import java.util.concu...
java 定义一个线程池 循环遍历list
java 定义一个线程池 循环遍历list 如果list有1000条数据,你瞬间就起了一千个线程,而且需要人为写代码注意同步问题。你这个代码最严重的问题是,子线程处理结果你主线程要拿到很麻烦,这一点在真正项目应用中很重要! 我发给你的那段代码我测过可以用的,大概调用思路就是: 把你“遍历一次需要15秒左右”这个事情写到一个类里面,类实现Callable接口, 这
对纯for循环进行并行流和线程池优化简记
最近在项目中需要根据角色拿对应任务(activiti 中的内容),再根据任务拿工单集(任务跟工单为多对一的关系,所以还需过滤掉重复的工单),获得最终结果集的耗时较大,所以考虑从多线程方向优化。 这些操作在一个for循环里涉及两处数据库查询IO,但IO的阻塞不严重,不属于IO密集型的多线程设计条件,所以采用线程池,优化的效果不是很好(对于IO阻塞系数较小的应用优化,多线程的使用,CPU在线程非阻塞
一种利用线程池进行for循环处理的思想
在for里面,如果执行一次for里面的内容所需时间“较长”(相对而言),不妨改用线程池的方式。 如下测试: public class ExecutorTest2 { private static final int loopNum = 1*10; public static void main(String args[]) throws InterruptedEx
java 线程池面试题
Java多线程面试问题 1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进程。线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源。 2. 多线程编程的好处是什么?  在多线程程序中,多个线程被
java 线程池
java 线程池 java 线程池 java 线程池 java 线程池
JAVA多线程实现-支持定时与周期性任务的线程池(newScheduledThreadPool)
前几篇文章中分别介绍了单线程化线程池(newSingleThreadExecutor)可控最大并发数线程池(newFixedThreadPool)可回收缓存线程池(newCachedThreadPool)newScheduledThreadPool用于构造安排线程池,能够根据需要安排在给定延迟后运行命令或者定期地执行。在JAVA文档的介绍public static ScheduledExecuto...
实现出现异常可重复执行的线程池-功能实现(1)
因为多线程是程序单独的在另一个线程里执行,这样出现了异常我们的主线程是监测不到的。有时候我们希望当程序发生异常时,还能再去进行重试,当达到重试次数后在进行异常的处理。   首先我们定义一个回调接口,类似于Runnable接口,如下: public interface QltRunnable{ /** * 程序正常的执行逻辑 */ void ru
【面试】线程/线程池总结
打个模板,有时间慢慢填空 线程总结 1.      什么是线程,什么是进程,线程和进程有什么区别? 2.      使用线程的优点和缺点是什么 3.      普通java程序中有线程吗(JVM中的线程) 4.      线程的名字 5.      线程的状态【重要】 6.      线程的创建方式之一:继承Thread类 7.      CPU的执行资格,和执行权
自定义线程池-有界队列
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.u