精华内容
下载资源
问答
  • 2019-07-24 17:12:57

    任务:读取文件每一行,并执行相应的操作(以打印行内容为例)。

    for循环方式:

    f = open('test.txt', 'r')
    for line in f.readlines():
        print(line)
    f.close()

     线程池方式:

    from multiprocessing.pool import ThreadPool
    
    def my_print(item):
        print(item)
    
    pool_size = 10
    f = open('test.txt', 'r')
    items = f.readlines()
    
    pool = ThreadPool(pool_size)  # 创建一个线程池
    pool.map(my_print, items)  # 往线程池中填线程
    pool.close()  # 关闭线程池,不再接受线程
    pool.join()  # 等待线程池中线程全部执行完
    

     

    更多相关内容
  • 就像这种
  • 线程池执行for循环

    2021-10-12 17:02:09
    ScheduledExecutorService pool = new ScheduledThreadPoolExecutor(10,new BasicThreadFactory.Builder().namingPattern("example-schedule-pool-%d").daemon(true).build())...for (int i = 0; i < list.size(); i
    ScheduledExecutorService pool = new ScheduledThreadPoolExecutor(10,new BasicThreadFactory.Builder().namingPattern("example-schedule-pool-%d").daemon(true).build());
    CountDownLatch cdl = new CountDownLatch(list.size());
    for (int i = 0; i < list.size(); i++) {
        final int j = i;
        Runnable run = new Runnable() {
            @SneakyThrows
            @Override
            public void run() {
                if (需要跳出) {
                    //计数器递减 退出
                    cdl.countDown();
                    return;
                }
                //主业务
                System.out.println();
                //计数器递减
                cdl.countDown();
            }
        };
        //执行线程
        pool.execute(run);
    }
    //线程执行完后再执行主线程
    cdl.await();
    //继续跑主线程
    System.out.println();
    
    展开全文
  • java for 循环使用线程池优化

    千次阅读 2018-11-01 15:14:34
     // 判断线程池中任务是否全部执行完毕 若执行完毕 再返回 list  if (executorService.isTerminated()){  break  }  }  resultList  }   //基于Runnable的实现  List<News> getNewsRoundup...

        List<News> getNewsRoundup(List<String> newsIds, Integer roundupSize) {
            Vector<News> resultList = new Vector<>();
            ExecutorService executorService = Executors.newFixedThreadPool(3)
            for (String newsId : newsIds) {
                try {

                      final String newsId = id   //定义final 否则会出现newsId不能遍历情况出现
                      //使用callable可以抛出异常
                    Callable<String> run = new Callable<String>() {
                        @Override
                        String call() throws Exception {
                            NewsOperation newsOperation = newsRepo.getUserNewsOperation(0L, newsId)
                            if (!NewsOperation) {
                                log.info("新闻摘要获取失败,newsOperationId:{}", newsId)
                                return null
                            }
                            Map newsMap = newsOperation.news
                            String newsRoundup = getNewsRoundup(newsMap, roundupSize)
                            if (newsRoundup) {
                                newsMap.createTime = null
                                newsMap.content = null
                                News news = News.toObject(newsMap)
                                news.setContentAbstract(newsRoundup)
                                news.setNewsId(newsId)
                                resultList << news
                            } else {
                                log.info("新闻摘要获取失败,newsOperationId:{}", newsId)
                            }
                        }
                    }
                    executorService.submit(run)
                } catch (Exception e) {
                    log.info("新闻摘要获取失败,newsOperationId:{}", newsId)
                    e.printStackTrace()
                }
            }

            //任务执行完毕后 关闭线程池 不再接收新任务
            executorService.shutdown()
            while (true){

                // 判断线程池中任务是否全部执行完毕  若执行完毕 再返回 list
                if (executorService.isTerminated()){
                    break
                }
            }
            resultList
        }

     

    //基于Runnable的实现

        List<News> getNewsRoundup(List<String> newsIds, Integer roundupSize) {
            Vector<News> resultList = new Vector<>();
            ExecutorService executorService = Executors.newFixedThreadPool(3)
            for (String newsId : newsIds) {
                try {
                    final String newsids = newsId;
                    executorService.execute(new Runnable() {
                        @Override
                        void run() {
                            NewsOperation newsOperation = newsRepo.getUserNewsOperation(0L, newsids)
                            if (!NewsOperation) {
                                log.info("新闻摘要获取失败,newsOperationId:{}", newsids)
                            }
                            Map newsMap = newsOperation.news
                            String newsRoundup = getNewsRoundup(newsMap, roundupSize)
                            if (newsRoundup) {
                                newsMap.createTime = null
                                newsMap.content = null
                                News news = News.toObject(newsMap)
                                news.setContentAbstract(newsRoundup)
                                news.setNewsId(newsids)
                                resultList << news
                            } else {
                                log.info("新闻摘要获取失败,newsOperationId:{}", newsId)
                            }
                        }
                    })
                } catch (Exception e) {
                    log.info("新闻摘要获取失败,newsOperationId:{}", newsId)
                    e.printStackTrace()
                }
            }
            executorService.shutdown()
            while (true) {
                if (executorService.isTerminated()) {
                    break
                }
            }
            resultList
        }

     

    展开全文
  • 多线程遍历for循环线程池

    千次阅读 2020-06-05 10:30:18
    //自定义线程池 ExecutorService pool=new ThreadPoolExecutor(5,10, 1L, TimeUnit.SECONDS, new LinkedBlockingQueue(3), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy()); final ...
    public List<String> m3( List<String> list) {
            List<String> a=new ArrayList<>();
            //自定义线程池
            ExecutorService pool=new ThreadPoolExecutor(5,10,
                    1L, TimeUnit.SECONDS,
                    new LinkedBlockingQueue<>(3),
                    Executors.defaultThreadFactory(),
                    new ThreadPoolExecutor.AbortPolicy());
            final CountDownLatch endGate = new CountDownLatch(list.size());
            for (int i = 0; i < list.size(); i++) {
                String str = list.get(i);
                Runnable run = new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Thread.sleep(1000);
    
                            //模拟耗时操作
                            System.out.println("[1]" + Thread.currentThread().getName()+"----"+str);
                            a.add(str);
                        } catch (Exception e) {
                       		 e.printStackTrace();
                        }finally {
                            endGate.countDown();
                        }
                    }
                };
                pool.execute(run);
                //pool.submit(run);
            }
           
            try {
                endGate.await();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            pool.shutdown();
            System.out.println("[1] done!");
            return a;
        }
    
    展开全文
  • JAVA线程池处理for循环

    2020-09-23 18:11:59
    } 项目的使用 JAVA找到图两点间的所有路径 import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.io.*; import java.util.*; import...
  • 项目偶尔总会遇到,for循环处理数据,感觉如果数据量比较大了,这个遍历的效果就非常的低效了,下面采用线程池并行来演示下效果新建test.pyimporttimewords=["apple","bananan","cake","dumpling"]*50defclock...
  • 1.普通for循环(项目上的设备抄表,常理来说for循环是一个一个来抄的,但是这样效率低下,特别是在设备多并且某设备需中间停留15秒后才可再次下发抄表指令时,效率是极其低的。) @Scheduled(cron = "0 */7 * * * ...
  • Java线程池优化for循环

    2021-02-27 16:37:37
    // 创建一个线程池,用10个线程处理 Executor executor = Executors.newFixedThreadPool(10); for (int i = 0; i < 100; i++) { executor.execute(new Runnable() { @Override public void run()...
  • 后参考网上优化建议,在Java中for循环中采用线程的方式进行速度优化。暂时查询速度是有所提高,只是不太后期会不会因为线程问题导致别的未知问题。暂时记录本次优化过程。 因正常的线程方式Thread、Runnab...
  • for里面,如果执行一次for里面的内容所需时间“较长”(相对而言),不妨改用线程池的方式。 如下测试: public class ExecutorTest2 { private static final int loopNum = 1*10; public static void ...
  • for循环中使用多线程

    千次阅读 2021-11-16 15:28:34
    每个service负责一个业务,多次进行重复业务就要使用到for循环...这种情况就在for循环中使用多线程。 import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; publ...
  • Android线程池

    2021-06-08 10:20:43
    重用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销能有效控制线程池的最大并发数,避免大量线程之间因互相抢占系统资源而导致的阻塞现象能够对线程进行简单的管理,并能提供定时执行以及指定间隔循环...
  • ExecutorService线程池处理for循环

    千次阅读 2020-02-11 17:02:08
    功能背景:为提高性能,需要异步执行一个list的数据。...多线程处理过程概述: 利用ExecutorService创建线程池,代码如下: int TOTAL_THREADS = 4;//线程数 //数据库的1万条数据; List list =...
  • 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程执行任务的时间,T3 销毁线程时间。如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。一个线程池包括以下四个基本组成部分:1、...
  • private static ExecutorService ex= Executors.newFixedThreadPool(5); ex.submit(new Runnable() { @Override public void run() { /* for (int i=0;i<10000;i++){ msDrugsDto.setId(null); ...
  • for (Future dateFuture : list) { all = all + dateFuture.get(); } return all; } } package com; import java.util.concurrent.Callable; public class CallableTest implements Callable { int i; CallableTest...
  • 循环体中将任务加入到线程池队列踩坑 问题描述 设置好 如何改变文本的样式 强调文本 强调文本 加粗文本 加粗文本 标记文本 删除文本 引用文本 H2O is是液体。 210 运算结果是 1024. 插入链接与图片 ...
  • java线程中断、线程池关闭

    千次阅读 2019-12-25 19:55:58
    在程序,我们是不能随便中断一个线程的,因为这是极其不安全的操作,我们无法知道这个线程正运行在什么状态,它可能持有某把锁,强行中断可能导致锁不能释放的问题;或者线程可能在操作数据库,强行中断导致数据不...
  • 它听起来不容易并行化,但第一个循环非常容易.我谈论实际演变的第二部分可能是也可能不是,但我想知道我是否因为我实现线程的方式而变慢,或者算法本身.此外,如果有人对如何实施我想要做的事情有更好的想法,那将非常...
  • java四种线程池使用

    2021-03-13 11:29:00
    Java通过Executors提供四种线程池,...newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。newSingl...
  • 如何在for循环中使用多线程

    千次阅读 2021-02-12 12:15:51
    //启用多线程 public static void main(String[] args) { for(int i=0;i;i++){ final int j=i; //关键是这一句代码,将 i 转化为 j,这样j 还是final类型的参与线程 executor.execute(new Runnable() { @Override ...
  • 线程池的实现

    万次阅读 2018-06-06 10:00:57
    使用线程池的好处: 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。...某些流程的一些节点,由于是串联执行的。上一步要等下一步执行完毕;或者提交数据之后要等待后台...
  • //假设有100万条数据,分十个线程池执行,每个线程执行十万条 // 计算循环次数 int listCount = users.size() / 100000; // 计算出余数 int remaider = users.size() % listCount; // 根据余数确定次数,如果余数...
  • 成功解决for循环语句,后几次循环输出数据一直全部为空 目录 解决问题 解决思路 解决方法 解决问题 for循环语句,后几次循环输出数据一直全部为空 解决思路 数据为空,如果不是...
  • 还有一种就是查询好数据(通过线程池),然后导出数据。这个就比较麻烦。因为我们要将数据通过多线程处理后,返回一个统一的结果。(由于多线程是在不同的时候执行数据),假如执行线程池后,在执行主线程,这就涉及...
  • public static void main(String[] args) { ... * 线程池 */ static ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 2, TimeUnit.MINUTES, new LinkedBlockingDeque<>()); for(int i=0;...
  • python for循环多进程执行应用

    万次阅读 2019-09-20 00:51:18
    以前了解过JAVA多线程多进程,python也学到过,但是就没有...list的每个元素没768维的向量,然后得出结果后,还需要排序,然后写入文件存储。这个场景就非常耗时,为了减少消耗时间,在单机的环境下,就想到了并...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 74,240
精华内容 29,696
关键字:

for循环中的线程池