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

摘要:
1导入java.util。列表2导入java.util.concurrent。倒计时锁存器;3导入java.util.concurrent。执行器服务;4导入java.util.concurrent。执行人;56publicclassBatchDownLoadNeLogByThread{7//导入数据8public
 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 }

免责声明:文章转载自《动态创建线程(多线程)处理大量数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇redux入门学习开源软硬一体OpenCV AI Kit(OAK)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQL SERVER 实现多个数据库之间表的联系,利用临时表枚举表中行数据

--SET IDENTITY_INSERT [User] on; SELECT ROW_NUMBER() OVER ( ORDER BY EmpID ) i,* INTO #A FROM [GMSToolManage].dbo.[employees]; DECLARE @count INT; SELECT @count=COUNT(1) FROM#A;...

怒肝半月!Python 学习路线+资源大汇总

Python 学习路线 by 鱼皮。 原创不易,请勿抄袭,违者必究! 大家好,我是鱼皮,肝了十天左右的 Python 学习路线终于来了~ 和之前一样,在看路线前,建议大家先通过以下视频了解几个问题: Python 为什么这么火? 为什么都在说学 Python 找不到工作?Python 真香么? 我要学 Python 么? 怎么快速学习? 视频地址:...

react异步数据如ajax请求应该放在哪个生命周期?

react请求接口数据是在componentDidMount 还是componentWillMount周期好?React数据获取为什么一定要在componentDidMount里面调用? 对于同步的状态改变,是可以放在componentWillMount,对于异步的,最好好放在componentDidMount。但如果此时有若干细节需要处理,比如你的组件需...

mvn打包时,出现数据库连接错误

原因: maven在install的时候会默认去执行test包下的test示例,导致打包失败,只需要把测试注释掉就可以了包括类上的注解,或者在install的时候跳过测试,install -Dmaven.test.skip=true 重新输入:mvn install -Dmaven.test.skip=true 打包成功!...

多线程实现数据库的并发操作

在Java中,程序需要操作数据库,操作数据首要事就是要获得数据库的Connection对象,利用多线程对数据导入数据库中将会加快操作进度,但是多个线程共享Connection对象,是不安全的,因为可以利用Java中的ThreadLocal为每个线程保存一个Connection对象,代码如下: package com.quar.innovation.db;...

DataGridView只显示数据源中绑定的字段

场景: 由于环境需要,在获取数据源的时候会获取多于DataGridView中绑定的字段,若不做任何处理,直接将数据源绑定到DataGridView上面,DataGridView就会将数据源中没有绑定的字段显示出来,这样就不符合我们的需求了。 DataGridView中有一个属性AutoGenerateColumns来控制这种情况。 在绑定数据源之前将Aut...