线程池优化,求助啊。

C灬C 2014-08-27 05:57:30


求助啊,这是做个指纹仪指纹识别的功能,想把这里通过线程池优化下,
自己也上网查了很多资料,还是看不出个所以然。求助了。
...全文
405 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jay007333 2014-08-29
  • 打赏
  • 举报
回复
把for循环内容用线程处理,任务过大,就把任务划分成十份或更小的粒度(比如取hashcode值与10做模运算,再存储在十个list里),多线程处理网上例子多得是!
致知Fighting 2014-08-28
  • 打赏
  • 举报
回复
引用 2 楼 as944985356 的回复:
[quote=引用 1 楼 ygycomon 的回复:] 通过线程池优化些什么东西,你是操作太耗时么,操作是CPU密集型操作还是内存密集型还是硬盘io太多导致耗时?
是因为数据量大,一个个循环效率会有问题,所以考虑用线程池。[/quote] 瓶颈在哪,那一个方法耗时最长,消耗的资源是cpu还是硬盘io
致知Fighting 2014-08-28
  • 打赏
  • 举报
回复
引用 8 楼 as944985356 的回复:
[quote=引用 6 楼 ygycomon 的回复:] [quote=引用 2 楼 as944985356 的回复:] [quote=引用 1 楼 ygycomon 的回复:] 通过线程池优化些什么东西,你是操作太耗时么,操作是CPU密集型操作还是内存密集型还是硬盘io太多导致耗时?
是因为数据量大,一个个循环效率会有问题,所以考虑用线程池。[/quote] 瓶颈在哪,那一个方法耗时最长,消耗的资源是cpu还是硬盘io[/quote] 就是循环那,由于指纹特征集数据量大,字段常常都是byte数组有几十万,所以在对比的时候想用线程去对比[/quote] 你还是没有回答我的问题,消耗的是cpu还是硬盘 如果你是cpu消耗的比较多,多线程是没用的,如果是硬盘消耗比较多就可以用多线程 我看你这比较的话,应该是消耗cpu的操作,你上多线程是没用的。要么优化算法,要么就多搞几台机器
C灬C 2014-08-28
  • 打赏
  • 举报
回复
引用 6 楼 ygycomon 的回复:
[quote=引用 2 楼 as944985356 的回复:] [quote=引用 1 楼 ygycomon 的回复:] 通过线程池优化些什么东西,你是操作太耗时么,操作是CPU密集型操作还是内存密集型还是硬盘io太多导致耗时?
是因为数据量大,一个个循环效率会有问题,所以考虑用线程池。[/quote] 瓶颈在哪,那一个方法耗时最长,消耗的资源是cpu还是硬盘io[/quote] 就是循环那,由于指纹特征集数据量大,字段常常都是byte数组有几十万,所以在对比的时候想用线程去对比
rmn190 2014-08-28
  • 打赏
  • 举报
回复
看不到线程在哪
小湘eeeee 2014-08-28
  • 打赏
  • 举报
回复
是不是可以把数据集合分割几份.每一份交个线程去同步处理
oh_Maxy 2014-08-27
  • 打赏
  • 举报
回复
使用多线程方式:

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();
            }
        }
    }
C灬C 2014-08-27
  • 打赏
  • 举报
回复
坐等回复 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C灬C 2014-08-27
  • 打赏
  • 举报
回复
引用 1 楼 ygycomon 的回复:
通过线程池优化些什么东西,你是操作太耗时么,操作是CPU密集型操作还是内存密集型还是硬盘io太多导致耗时?
是因为数据量大,一个个循环效率会有问题,所以考虑用线程池。
致知Fighting 2014-08-27
  • 打赏
  • 举报
回复
通过线程池优化些什么东西,你是操作太耗时么,操作是CPU密集型操作还是内存密集型还是硬盘io太多导致耗时?

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧