• 动态创建线程(多线程)处理大量数据


     1 import java.util.List;
     2 import java.util.concurrent.CountDownLatch;
     3 import java.util.concurrent.ExecutorService;
     4 import java.util.concurrent.Executors;
     5 
     6 public class BatchDownLoadNeLogByThread {
     7     // 导入数据
     8     public boolean importData(List<String> list) {
     9     
    10         // 线程数
    11         int RunSize =list.size();
    12         // 创建一个线程池
    13     //    ThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(RunSize);
    14         ExecutorService executor = Executors.newCachedThreadPool();
    15     //    ExecutorService executor = Executors.newSingleThreadExecutor();
    16         CountDownLatch countDownLatch = new CountDownLatch(RunSize);
    17         try {
    18             for (int i = 0; i < RunSize; i++) {
    19                 String newlist = list.get(i);
    20                 ImportTask task = new ImportTask(newlist, countDownLatch);
    21                 executor.execute(task);
    22             }
    23             countDownLatch.await();// 主线程等待所有线程完成任务
    24         } catch (InterruptedException e) {
    25             // TODO Auto-generated catch block
    26             e.printStackTrace();
    27             return false;
    28         } 
    29         // 所有线程完成任务后的一些业务
    30         System.out.println("数据下载完成!");
    31         // 关闭线程池
    32         executor.shutdown();
    33         return true;
    34 
    35     }
    36 
    37     class ImportTask implements Runnable {
    38         private String newNe;
    39         private CountDownLatch countDownLatch;
    40 
    41         public ImportTask( String newNe, CountDownLatch countDownLatch) {
    42             this.newNe = newNe;
    43             this.countDownLatch = countDownLatch;
    44         }
    45 
    46         @Override
    47         public void run() {
    48             boolean flag1 = false;
    49             try {
    50                 
    51                 if (newNe != null) {
    52                     // 业务逻辑
    53                     
    54                 }
    55             } catch (Exception e) {
    56                 // TODO Auto-generated catch block
    57                 e.printStackTrace();
    58             }finally{
    59                 countDownLatch.countDown();// 发出线程任务完成的信号
    60             }
    61 
    62         }
    63     }
    64 
    65 }
  • 相关阅读:
    ASP.NET HttpRuntime.Cache缓存类使用总结
    ASP.NET MVC自定义AuthorizeAttribute篇知识点讲解—登录限制
    Echarts图表控件使用总结2(Line,Bar)—问题篇
    数据库查询实例(包含所有where条件例子)
    php file_get_contents读取大容量文件方法
    如何给mysql用户分配权限
    dedecms {dede:php}标签用法介绍
    js获取字符串最后一个字符代码
    CSS3选择器之学习笔记
    SQL中实现SPLIT函数几种方法
  • 原文地址:https://www.cnblogs.com/lhq1996/p/13025778.html
Copyright © 2020-2023  润新知