需求:目前某某商城有十万个用户,现在该商城需要做一个活动,于是需要给每一个用户发送一条该活动内容的短信。
1.创建用户实体类
/**
* 用户实体类
* @author Administrator
*
*/
public class UserEntity {
private String userId;
private String userName;
public UserEntity(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 "UserEntity [userId=" + userId + ", userName=" + userName + "]";
}
}
2.
/**
* 集合分批切割
* @author Administrator
*
*/
public class ListUtils {
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;
}
}
3.
class UserSendThread implements Runnable{
private List<UserEntity> listUser;
//通过构造函数,传入每个线程需要执行的发送短信内容
public UserSendThread(List<UserEntity> listUser){
this.listUser=listUser;
}
@Override
public void run() {
for(UserEntity userEntity:listUser){
System.out.println(Thread.currentThread().getName()+","+userEntity.toString());
}
System.out.println();
}
}
public class BatchSms {
public static void main(String[] args) {
//1.初始化数据
List<UserEntity> initUser=initUser();
//2.定义每个线程分批发送大小
int userCount=2;
//3.计算每个线程需要分批跑的数据
List<List<UserEntity>> splitList=ListUtils.splitList(initUser, userCount);
for(int i=0;i<splitList.size();i++){
List<UserEntity> list=splitList.get(i);
UserSendThread userThread=new UserSendThread(list);
//4.分配发送
Thread thread=new Thread(userThread,"线程:"+i);
thread.start();
}
}
static private List<UserEntity> initUser(){
List<UserEntity> list=new ArrayList<UserEntity>();
for(int i=1;i<=11;i++){
list.add(new UserEntity("userId:"+i,"userName:"+i));
}
return list;
}
}
