模拟多线程给多用户发送短信

Posted wang66a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟多线程给多用户发送短信相关的知识,希望对你有一定的参考价值。

代码编写逻辑,假设需要给11个用户发送短信,每一个线程给两个用户发送短信,实现多线程的并发处理

创建实体user

package www.it.com.test;

/**
 * @author wangjie
 * @date 2019/11/20 17:10
 * @description
 * @company 石文软件有限公司
 */
public class User {

    private  String name;
    private  Integer id;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public User() {
    }

    public User(String name, Integer id) {
        this.name = name;
        this.id = id;
    }

    @Override
    public String toString() {
        return "User{" +
                "name=‘" + name + ‘‘‘ +
                ", id=" + id +
                ‘}‘;
    }
}

 

业务代码

package www.it.com.test;

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

/**
 * @author wangjie
 * @date 2019/11/20 17:09
 * @description
 * @company 石文软件有限公司
 */
public class BranchThread {
    public static void main(String[] args) {
        //准备数据源
        List<User> userList = getInitUser();
        //定义每个线程处理多少用户
        Integer count = 2;
        //根据用户数确定需要多少个线程
        List<List<User>> lists = splitList(userList, count);
        //将用户传每个线程执行
        for (List<User> list:lists) {
            UserThread userThread=new UserThread(list);
            Thread thread=new Thread(userThread);
            //启动线程
            thread.start();
        }



    }

    /**
     * 初始话数据
     * @return
     */
    public static List<User> getInitUser() {
        ArrayList<User> list = new ArrayList<>();
        for (int i = 0; i < 11; i++) {
            User user = new User();
            user.setId(i);
            String name = String.valueOf(i);
            user.setName(name);
            list.add(user);
        }
        return list;
    }

    /**
     * 计算出需要多少个线程
     * @param list
     * @param pageSize
     * @param <T>
     * @return
     */
    public static <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 www.it.com.test;

import java.util.List;

/**
 * @author wangjie
 * @date 2019/11/20 17:03
 * @description 给11个人分批发送短信
 * @company 石文软件有限公司
 */
public class UserThread implements Runnable{

    private List<User> userList;

    public UserThread(List<User> userList) {
        this.userList = userList;
    }

    public List<User> getUserList() {
        return userList;
    }

    public void setUserList(List<User> userList) {
        this.userList = userList;
    }

    @Override
    public void run() {
        userList.forEach(user -> {
            System.out.println("线程"+Thread.currentThread().getId()+user.toString());
        });
        
        //调用第三方发送短信的接口
    }
}

 

以上是关于模拟多线程给多用户发送短信的主要内容,如果未能解决你的问题,请参考以下文章

使用appium模拟用户发送短信

第一次使用多线程

Java——使用多线程从list中不重复地取出数据并进行处理,给多线程任务添加单项任务计时和总耗时

Java——使用多线程从list中不重复地取出数据并进行处理,给多线程任务添加单项任务计时和总耗时

多个用户访问同一段代码

无法在片段内查看接收短信