多线程(十)使用多线程分批处理信息

需求分析:现在银行有一批10万的用户,需要给每个用户发一条短信 应该怎么做?假如每条短信的发送时间是1秒 使用单线程 就是10万秒 这时候我们可以用多线程分批处理。

代码实现步骤如下:

代码如下:

实体类

package org.Thread_batch.pojo;
/**
 * 功能描述(用户的实体类)
 * @author zuojie
 *
 */

public class User {
	private String userId;
	private String userName;
	
	public User(String userId, String userName) {
		super();
		this.userId = userId;
		this.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;
	}
	@Override
	public String toString() {
		return "User [userId=" + userId + ", userName=" + userName + "]";
	}
	
	

}

工具类

package org.Thread_batch;

import java.util.ArrayList;
import java.util.List;

public class ListUtils {
	/**
	 * 
	 * @param list
	 * @param pageSize
	 * @return
	 * @param list 切割集合
	 * @param pageSize 分页长度
	 * @return List<List<T>>返回分页数据
	 */

	static public <T> List<List<T>> splitList(List<T> list, int pageSize) {
		int listSize = list.size();
		int page = (listSize + (pageSize - 1)) / pageSize;
		List<List<T>> listArray = new ArrayList<List<T>>();
		for (int i = 0; i < page; i++) {
			List<T> subList = new ArrayList<T>();
			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;
	}
}

实现类

package org.Thread_batch;

import java.util.ArrayList;
import java.util.List;

import org.Thread_batch.pojo.User;
class UserSendThread implements Runnable {
	private List<User> listUser;
	public UserSendThread(List<User> listUser) {
		this.listUser=listUser;
	}
	public void run() {
		for (User user : listUser) {
			System.out.println(Thread.currentThread().getName()+","+user.toString());
		}
		System.out.println();
	}
}

public class BatchSms {
	
	public static void main(String[] args) {
		//1.初始化数据
		List<User>initUser=initUser();
		//2.定义每个线程分批发送大小
		int userCount = 2;
		//3.计算每个线程需要分配的数据
		List<List<User>> splitList = ListUtils.splitList(initUser, userCount);
		for (int i = 0; i < splitList.size(); i++) {
			List<User> list = splitList.get(i);
			UserSendThread userSendThread = new UserSendThread(list);
			//4.分配发送
			Thread thread = new Thread(userSendThread,"线程"+i);
			thread.start();
		}
		
	}
	private static List<User> initUser(){
	List<User>users=new ArrayList<User>();
	for (int i = 0; i < 20; i++) {
		users.add(new User("userId"+i, "userName"+i));
	}
		return users;
	}

}

运行结果:

猜你喜欢

转载自blog.csdn.net/OnlyoneFrist/article/details/88676958