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. SpringBoot第二十三篇:安全性之Spring Security

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11350255.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   系统的安全 ...

  2. Java学习|多线程学习笔记

    什么是线程?     可以理解为进程中独立运行的字任务.   使用多线程:     1.继承Thread类:从源码可以看到,Thread累实现了Runnable接口.         如果多次调用st ...

  3. 颜色下拉菜单(combox)

    using System; using System.Drawing; using System.Collections; using System.ComponentModel; using Sys ...

  4. intellij idea 2019 安装使用教程

    一.安装 idea   2019.2   链接:https://pan.baidu.com/s/1acx_P23W463it9PGAYUIBw 提取码:4bky 双击运行idea.exe 点击Next ...

  5. Spring参数的自解析--还在自己转换?你out了!

    背景前段时间开发一个接口,因为调用我接口的同事脾气特别好,我也就不客气,我就直接把源代码发给他当接口定义了. 没想到同事看到我的代码问:要么 get  a,b,c  要么  post [a,b,c]. ...

  6. net core Webapi基础工程搭建(三)——在线接口文档Swagger

    目录 前言 Swagger NuGet引用第三方类库 别急,还有 没错,注释 小结 前言 前后分离的好处,就是后端埋头做业务逻辑功能,不需要过多考虑用户体验,只专注于数据.性能开发,对于前端需要的数据 ...

  7. 关于sparksql中设置自定义自增列的相关要点(工作共踩过的坑-1)

    小白终于进入了职场,从事大数据方面的工作! 分到项目组了,搬砖的时候遇到了一个这样的问题. 要求:用spark实现oracle的存储过程中计算部分. 坑:由于报表中包含了一个ID字段,其要求是不同的区 ...

  8. EOS源码分析:transaction的一生

    最近在处理智能合约的事务上链问题,发现其中仍旧有知识盲点.原有的认识是一个事务请求会从客户端设备打包签名,然后通过RPC传到非出块节点,广播给超级节点,校验打包到可逆区块,共识确认最后变为不可逆区块. ...

  9. 微服务架构 - 网关 Spring Cloud Gateway

    Spring Cloud Gateway 工作原理 客户端向 Spring Cloud Gateway 发出请求,如果请求与网关程序定义的路由匹配,则将其发送到网关 Web 处理程序,此处理程序运行特 ...

  10. Linux查找命令对比(find、locate、whereis、which、type、grep)

    //太长不看版find查找磁盘空间,相较于locate和whereis速度较慢.find和locate的查找单位为文件或者目录,locate其实是find -name的另一种写法.locate和whe ...