zoukankan      html  css  js  c++  java
  • 算法----多线程对List进行操作

    多个线程对list操作,每个线程处理list中的每一段数据

    比如,线程1处理0-100的数据,线程2处理100-200的数据

    class A{
        public static void main(String[] args){
    
            List<String> scheList = new ArrayList<>();
            scheList.add("1");
            scheList.add("2");
            scheList.add("3");
            scheList.add("4");
            scheList.add("5");
            scheList.add("6");
            scheList.add("7");
            scheList.add("8");
            scheList.add("9");
    
            //每个线程一次处理的数量
            int num = 2;
            //线程数量
            int threadnum=4;
            
            
            int j = 0;
            int k = j+num;
            ArrayList<Thread> threads = new ArrayList<>();
            while (true){
                for (int i = 0; i < threadnum; i++) {
                    if (k>scheList.size()){
                        k=scheList.size();
                    }
    //主线程将list切分交给每一个线程处理 List<String> strings1 = scheList.subList(j, k); int finalK = k; threads.add(new Thread(new Runnable() { @Override public void run() { try { System.out.println(strings1); }catch (Exception e){ System.out.println(e); } } })); //如果list已经完了,不在创建线程 if (k==scheList.size()){ break; } //当先线程数量-1 if (i<threadnum-1){ j=k; k = j+num; } } for(Thread t:threads){ t.start(); } for(Thread t:threads){ try { t.join(); }catch (Exception e){ System.out.println(e.getMessage()); } } threads.clear(); if (k==(scheList.size())){ break; } j=k; k = j+num; } System.out.println("结束"); } }

      

  • 相关阅读:
    一个新的Activity跳转到带有Framgment的Activity页面
    安卓图片下载及存储
    安卓4.0以上 UDP 发送端
    安卓 service 后台运行,activity 启动和停止service
    安卓 BaseAdapter ListView和Button
    安卓点击两次返回键退出程序
    安卓 surfaceview 添加点击事件
    Mybatis
    Cookie
    AJAX原生代码
  • 原文地址:https://www.cnblogs.com/yanxiaoge/p/14350164.html
Copyright © 2011-2022 走看看