JAVA模擬多線程給多用戶發(fā)送短信
這篇文章主要介紹了JAVA模擬多線程給多用戶發(fā)送短信,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
代碼編寫邏輯,假設(shè)需要給11個(gè)用戶發(fā)送短信,每一個(gè)線程給兩個(gè)用戶發(fā)送短信,實(shí)現(xiàn)多線程的并發(fā)處理
創(chuàng)建實(shí)體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 +
'}';
}
}
業(yè)務(wù)代碼
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) {
//準(zhǔn)備數(shù)據(jù)源
List<User> userList = getInitUser();
//定義每個(gè)線程處理多少用戶
Integer count = 2;
//根據(jù)用戶數(shù)確定需要多少個(gè)線程
List<List<User>> lists = splitList(userList, count);
//將用戶傳每個(gè)線程執(zhí)行
for (List<User> list:lists) {
UserThread userThread=new UserThread(list);
Thread thread=new Thread(userThread);
//啟動(dòng)線程
thread.start();
}
}
/**
* 初始話數(shù)據(jù)
* @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;
}
/**
* 計(jì)算出需要多少個(gè)線程
* @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;
}
}
創(chuàng)建線程
package www.it.com.test;
import java.util.List;
/**
* @author wangjie
* @date 2019/11/20 17:03
* @description 給11個(gè)人分批發(fā)送短信
* @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());
});
//調(diào)用第三方發(fā)送短信的接口
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot中的多個(gè)application文件講解
這篇文章主要介紹了springboot中的多個(gè)application文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
有關(guān)Java常見的誤解小結(jié)(來看一看)
下面小編就為大家?guī)硪黄嘘P(guān)Java常見的誤解小結(jié)(來看一看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
Java 替換字符串右側(cè)出現(xiàn)的第一個(gè)子串方式
這篇文章主要介紹了Java 替換字符串右側(cè)出現(xiàn)的第一個(gè)子串方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
java虛擬機(jī)參數(shù)-D、-X和-XX的區(qū)別小結(jié)
本文主要介紹了java虛擬機(jī)參數(shù)-D、-X和-XX的區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06

