java多线程之批量操作
来源:互联网 发布:stl源码剖析 知乎 编辑:程序博客网 时间:2024/06/06 10:06
第一次写博客,工作一年多,属于新手类型,错误和不足之处大家多多提醒,谢谢啦。
作用简介:
最直观的效果就是大大减少了操作时间。
1.首先建立测试实体类
package com.ncq.entity;import java.io.Serializable;public class Student implements Serializable{private static final long serialVersionUID = 1L;private Long id;private String name;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}2.建立实现业务的类
package com.ncq.service.impl;import java.util.List;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import com.ncq.entity.Student;import com.ncq.service.TestService;public class TestServiceImpl implements TestService{private ExecutorService executor = Executors.newFixedThreadPool(10);//给定线程池数量private static final int MAX_DEAL = 50;//对多数据进行分组,50条一组,一组使用一个线程进行执行@Overridepublic void addList(List<Student> list) {//判断数据是否为空if(list == null || list.isEmpty()){return;}int times = (list.size() + MAX_DEAL - 1) / MAX_DEAL; CountDownLatch countDownLatch = new CountDownLatch(times);//一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 try { for (int i = 0; i < times; i++) { if (i == times - 1) { executor.execute(new addListRunnable(list.subList(i * MAX_DEAL, list.size()), countDownLatch));//调用业务逻辑 } else { executor.execute(new addListRunnable(list.subList(i * MAX_DEAL, (i + 1) * MAX_DEAL), countDownLatch)); } } countDownLatch.await();//一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行} catch (Exception e) {e.printStackTrace();} }private class addListRunnable implements Runnable{private List<Student> list;private CountDownLatch countDownLatch;public addListRunnable(List<Student> list,CountDownLatch countDownLatch){super();this.list = list;this.countDownLatch = countDownLatch;}@Overridepublic void run() {try {//模拟业务执行,这里并没有对list进行操作Thread.sleep(1000);System.out.println("当前线程为"+Thread.currentThread().getId());//输出当前线程id} catch (Exception e) {e.printStackTrace();}finally { countDownLatch.countDown();//完成一次操作,计数减一 }}}}
</pre><p></p><pre>3.测试main方法
package com.ncq.test;import java.util.ArrayList;import java.util.List;import com.ncq.entity.Student;import com.ncq.service.impl.TestServiceImpl;public class Main {public static void main(String[] args) {List<Student> list = new ArrayList<Student>();for (int i = 0; i < 1010; i++) {Student stu = new Student();stu.setId(Long.valueOf(i));stu.setName("张三"+i);list.add(stu);}TestServiceImpl s = new TestServiceImpl();s.addList(list);System.out.println("==执行了完成==");}}写完收工,不足的地方请大牛指导
0 0
- java多线程之批量操作
- shell 批量操作 多线程
- java多线程之java操作进程
- SSM--之批量操作
- Java多线程之键盘操作练习
- java多线程(2)之CAS操作
- JAVA批量操作数据库
- Java批量操作数据库
- java 批量操作数据库
- java批量删除操作
- java之poi操作excel-批量导入导出
- 批量SQL操作之批量获取
- python 多线程批量操作数据库测试
- ibatis之批量操作实例
- Mybatis之批量更新操作
- Mybatis之批量更新操作
- Mybatis之批量更新操作
- Mybatis之批量操作-Oracle
- 栈和队列
- 思迅软件找回会员卡信息数据库修复误删除修复
- 算法导论第七章 -- 快速排序
- 深度学习方法:受限玻尔兹曼机RBM(四)对比散度contrastive divergence,CD
- 在caffe上跑自己的数据
- java多线程之批量操作
- nm命令
- 性能测试--Spotlight
- 3073: [Pa2011]Journeys|线段树|BFS
- ava.lang.OutOfMemoryError: Java heap space 的快速解决办法
- session与cookie的区别
- 获取当前应用版本号
- win7使用telnet
- 自动化测试--Jenkins