1、创建一个类,用户存储信息

public class Users {
private String userid;
private String username; public Users() { } public Users(String userid, String username) {
this.userid = userid;
this.username = username;
} @Override
public String toString() {
return "Users{" +
"userid='" + userid + '\'' +
", username='" + username + '\'' +
'}';
} public String getUserid() {
return userid;
} public void setUserid(String userid) {
this.userid = userid;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} }

2、进行分页,任务分阶段

/**
* 分页
* @param list
* @param pageSize
* @param <T>
* @return
*/
public static <T> List<List<T>> splitList(List<T> list, int pageSize) {
int listSize = list.size();
System.out.println(listSize);
int page = (listSize + (pageSize - 1)) / pageSize; //分多少页
List<List<T>> listArray = new ArrayList<>(); //用于存放页码,和页面中存放的值
for (int i = 0; i < page; i++) {
List<T> subList = new ArrayList<>();
for (int j = 0; j < listSize; j++) {
int pageIndex = ((j + 1) + (pageSize - 1)) / pageSize;
if (pageIndex == (i + 1)) {
subList.add(list.get(j));
}
if ((j + 1) == ((j + 1) * pageSize)) {
break;
}
}
listArray.add(subList);
}
return listArray;
}

3、创建线程,并测试

public class Test {

    /**
* 初始化用户信息
*
* @return
*/
public static List<Users> initUser() {
List<Users> listUser = new ArrayList<>();
for (int i = 0; i < 10; i++) {
listUser.add(new Users("userId:" + i, "userName:" + i));
}
return listUser;
} /**
* 分页
* @param list
* @param pageSize
* @param <T>
* @return
*/
public static <T> List<List<T>> splitList(List<T> list, int pageSize) {
int listSize = list.size();
System.out.println(listSize);
int page = (listSize + (pageSize - 1)) / pageSize; //分多少页
List<List<T>> listArray = new ArrayList<>(); //用于存放页码,和页面中存放的值
for (int i = 0; i < page; i++) {
List<T> subList = new ArrayList<>();
for (int j = 0; j < listSize; j++) {
int pageIndex = ((j + 1) + (pageSize - 1)) / pageSize;
if (pageIndex == (i + 1)) {
subList.add(list.get(j));
}
if ((j + 1) == ((j + 1) * pageSize)) {
break;
}
}
listArray.add(subList);
}
return listArray;
} public static void main(String[] args) {
//1、初始化数据
List<Users> users = initUser(); //2、每次发送数据
int userCount = 2; //3、分段数据
List<List<Users>> lists = splitList(users, 2);
for (int i = 0; i < lists.size(); i++) {
List<Users> users1 = lists.get(i);
//4、创建线程
new Thread(new Runnable() {
@Override
public void run() {
for (Users listusers : users1) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("name: "+Thread.currentThread().getName()+" "+listusers);
}
}
}).start();
//System.out.println("i: " + i + "---" + users1);
}
}
}

4、测试结果

name: Thread-0   Users{userid='userId:0', username='userName:0'}
name: Thread-2 Users{userid='userId:4', username='userName:4'}
name: Thread-1 Users{userid='userId:2', username='userName:2'}
name: Thread-3 Users{userid='userId:6', username='userName:6'}
name: Thread-4 Users{userid='userId:8', username='userName:8'}
name: Thread-2 Users{userid='userId:5', username='userName:5'}
name: Thread-0 Users{userid='userId:1', username='userName:1'}
name: Thread-3 Users{userid='userId:7', username='userName:7'}
name: Thread-1 Users{userid='userId:3', username='userName:3'}
name: Thread-4 Users{userid='userId:9', username='userName:9'}

任务分线程实现(java)的更多相关文章

  1. log4j2配置MDC分线程写日志

    1.MDC是一个高级一些的工具,可以配置分用户(userid)写日志,也可以分线程 2.方法和道理都是相似的,在写入日志之前配置线程名或者用户id 3.如果将线程名配置为目录,可以将不同线程的日志输送 ...

  2. (92)Wangdao.com_第二十五天_线程机制_H5 Web Workers 分线程任务_事件 Event

    浏览器内核 支撑浏览器运行的最核心的程序 IE 浏览器内核            Trident内核,也是俗称的IE内核Chrome 浏览器内核            统称为 Chromium 内核或 ...

  3. h5分线程Worker

    <!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>Ti ...

  4. 【Java中的线程】java.lang.Thread 类分析

    进程和线程 联想一下现实生活中的例子--烧开水,烧开水时是不是不需要在旁边守着,交给热水机完成,烧开水这段时间可以去干一点其他的事情,例如将衣服丢到洗衣机中洗衣服.这样开水烧完,衣服洗的也差不多了.这 ...

  5. 【Java线程】Java内存模型总结

    学习资料:http://www.infoq.com/cn/articles/Java-memory-model-1 Java的并发采用的是共享内存模型(而非消息传递模型),线程之间共享程序的公共状态, ...

  6. (转)【Java线程】Java内存模型总结

    Java的并发采用的是共享内存模型(而非消息传递模型),线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信.多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变 ...

  7. Java 线程--实现java.lang.Runnable接口实现线程

    Java线程的第一种实现方式,主要分两步,第一步是继承java.lang.Thread; 第二步是重写run()方法.接下来我们来看Java线程的第二种实现方式,也是分为两步,第一步,写一个类实现ja ...

  8. 【转】线程同步------java synchronized详解

    Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchronized(this ...

  9. java并发编程(十七)----(线程池)java线程池架构和原理

    前面我们简单介绍了线程池的使用,但是对于其如何运行我们还不清楚,Executors为我们提供了简单的线程工厂类,但是我们知道ThreadPoolExecutor是线程池的具体实现类.我们先从他开始分析 ...

随机推荐

  1. golang学习(1)---快速hello world

    很多著名的计算机语言都是一两个人在业余时间捣鼓出来的,但是Go语言是由Google的团队打造的.可能一些基础的知识点我不会细讲,因为这个时代你真的得快速学习,才能适应发展. 来看看go的hello, ...

  2. maven阿里云镜像setting

    <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...

  3. C语言连接mysql,用GCC编译

    1. main.c文件内容如下 #include <stdlib.h>#include <stdio.h>#include <winsock.h>#include ...

  4. 源码分析--dubbo服务端暴露

    服务暴露的入口方法是 ServiceBean 的 onApplicationEvent.onApplicationEvent 是一个事件响应方法,该方法会在收到 Spring 上下文刷新事件后执行服务 ...

  5. 教你用原生CSS写炫酷页面切换效果,跟第三方组件说拜拜

    因为项目需要,别人想让我给他写一个个人博客,并且给了我一个其他人的网页,可以点此查看.有的同学可能说了,第三方博客框架这么多,为什么还要去手写的,你说这个有可能是没有看到打开这个博客. 样式介绍 给大 ...

  6. Springboot源码分析之AbstractAdvisorAutoProxyCreator

    摘要: Spring的代理在上层中主要分为ProxyCreatorSupport和ProxyProcessorSupport,前者是基于代理工厂,后者是基于后置处理器,也可以认为后置就是自动代理器.当 ...

  7. 思科ACS5.8最新搭建教程-亲测可用

    1.需要准备的相关软件 ACS5.8安装包:http://ouo.io/MWB0R ACS5.8破解包:http://ouo.io/FaiGgj Centos7:下载地址(破解时需要):http:// ...

  8. CodeForces 1200F

    题意略. 思路: 如果是问一下然后搜一下,那必然是不现实的.因此我们要预处理出所有的答案. 我们令mod = lcm(m1,m2,...,mn).可知,在任意一点,我们挑选两个不同的数c1.c2,其中 ...

  9. Leetcode之二分法专题-240. 搜索二维矩阵 II(Search a 2D Matrix II)

    Leetcode之二分法专题-240. 搜索二维矩阵 II(Search a 2D Matrix II) 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵 ...

  10. Mysql系列 - 第3天:管理员必备技能(必须掌握)

    这是mysql系列第3篇文章. 环境:mysql5.7.25,cmd命令中进行演示. 在玩mysql的过程中,经常遇到有很多朋友在云上面玩mysql的时候,说我创建了一个用户为什么不能登录?为什么没有 ...