任务分线程实现(java)
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)的更多相关文章
- log4j2配置MDC分线程写日志
1.MDC是一个高级一些的工具,可以配置分用户(userid)写日志,也可以分线程 2.方法和道理都是相似的,在写入日志之前配置线程名或者用户id 3.如果将线程名配置为目录,可以将不同线程的日志输送 ...
- (92)Wangdao.com_第二十五天_线程机制_H5 Web Workers 分线程任务_事件 Event
浏览器内核 支撑浏览器运行的最核心的程序 IE 浏览器内核 Trident内核,也是俗称的IE内核Chrome 浏览器内核 统称为 Chromium 内核或 ...
- h5分线程Worker
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>Ti ...
- 【Java中的线程】java.lang.Thread 类分析
进程和线程 联想一下现实生活中的例子--烧开水,烧开水时是不是不需要在旁边守着,交给热水机完成,烧开水这段时间可以去干一点其他的事情,例如将衣服丢到洗衣机中洗衣服.这样开水烧完,衣服洗的也差不多了.这 ...
- 【Java线程】Java内存模型总结
学习资料:http://www.infoq.com/cn/articles/Java-memory-model-1 Java的并发采用的是共享内存模型(而非消息传递模型),线程之间共享程序的公共状态, ...
- (转)【Java线程】Java内存模型总结
Java的并发采用的是共享内存模型(而非消息传递模型),线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信.多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变 ...
- Java 线程--实现java.lang.Runnable接口实现线程
Java线程的第一种实现方式,主要分两步,第一步是继承java.lang.Thread; 第二步是重写run()方法.接下来我们来看Java线程的第二种实现方式,也是分为两步,第一步,写一个类实现ja ...
- 【转】线程同步------java synchronized详解
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchronized(this ...
- java并发编程(十七)----(线程池)java线程池架构和原理
前面我们简单介绍了线程池的使用,但是对于其如何运行我们还不清楚,Executors为我们提供了简单的线程工厂类,但是我们知道ThreadPoolExecutor是线程池的具体实现类.我们先从他开始分析 ...
随机推荐
- 如何调教你的博客Episode2——移动端支持和UI美化
这个系列的文章是我在搭建博客园博客时所经历的过程. 在上一期如何调教你的博客Episode1——修改整体样式中,我们通过添加CSS样式,修改了页面的总体布局.但将文章发出之后,博客的布局就出现问题了: ...
- Java 在spring cloud中使用Redis,spring boot同样适用
1.本地安装redis服务,官网下载. 2.在开发中要使用redis,首先要启动本地redis服务,启动后页面如下: 3.在spring boot项目pom.xml文件中添加Redis需要的依赖包,可 ...
- Kafka 原理和实战
本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语 ...
- maven学习(3)pom.xml文件说明以及常用指令
pom.xml文件的结构: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:/ ...
- ip地址、域名、DNS、URL的区别与联系
IP:每个连接到Internet上的主机都会分配一个IP地址,此ip是该计算机在互联网上的逻辑地址的唯一标识,计算机之间的访问就是通过IP地址来进行的.写法:十进制的形式,用“.”分开,叫做“点分十进 ...
- Xshell登陆服务器及Linux的简单命令
在之前的推文中,我已经给出了怎样利用Git登陆服务器”你在用xshell,putty登陆?推荐一个小工具(Git)登陆“其中包括xshell登陆服务器.今天讲讲常见的Linux命令,这个和之前将的利用 ...
- 开发者工具conloseLog的使用
- Nacos(八):Nacos持久化
参考和感谢 Spring Cloud Alibaba基础教程:Nacos的数据持久化 前言 前景回顾: Nacos(七):Nacos共享配置 Nacos(六):多环境下如何"管理" ...
- spring、spring mvc与spring boot的区别是什么?
Spring 的功能 Spring 框架就像一个家族,有众多衍生产品例如 boot.security.jpa等等.但他们的基础都是Spring 的 ioc和 aop ioc 提供了依赖注入的容器 ao ...
- Badboy中创建Suite, test, step和Template
参考: http://leafwf.blog.51cto.com/872759/1111744 http://www.51testing.com/html/00/130600-1367743.html ...