java多线程快速入门(六)

多线程应用实例(批量发送短信)

1、创建实体类

package com.cppdy;

public class UserEntity {

    private int id;
    private String name;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

UserEntity

2、创建工具类

package com.cppdy;

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

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>> arrayList = 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;
                }
            }
            arrayList.add(subList);
        }
        return arrayList;
    }

}

ListUtils

3、创建实例类

package com.cppdy;

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

class sendMsgThread extends Thread{

    List<UserEntity> userList;
    public sendMsgThread(List<UserEntity> list) {
        this.userList=list;
    }
    @Override
    public void run() {
        for (int i = 0; i < userList.size(); i++) {
            System.out.println("线程"+this.getId()+"发送短信给"+userList.get(i).getName());
        }
    }
}

public class Send {

    public static void main(String[] args) {

        List<List<UserEntity>> splitList = ListUtils.splitList(initUser(), 40);
        for (int i = 0; i < splitList.size(); i++) {
            new sendMsgThread(splitList.get(i)).start();
        }

    }

    public static List<UserEntity> initUser(){
        ArrayList<UserEntity> userList = new ArrayList<>();
        UserEntity userEntity;
        for (int i = 0; i < 150; i++) {
            userEntity = new UserEntity();
            userEntity.setId(i);
            userEntity.setName("name"+i);
            userList.add(userEntity);
        }
        return userList;
    }
}

Send

原文地址:https://www.cnblogs.com/cppdy/p/10014304.html

时间: 2024-08-01 03:05:17

java多线程快速入门(六)的相关文章

java 多线程 快速入门

------------恢复内容开始------------ java 多线程 快速入门 1. 进程和线程 什么是进程? 进程是正在运行的程序它是线程的集合 进程中一定有一个主线程 一个操作系统可以有多个线程  什么是线程? 线程就是独立的运行一条执行路径 一个独立的执行单元 , 一个执行流程 为什么要使用多线程? 多线程提高程序效率 , 使用多线程 , 每个线程互补影响 2.创建线程的方式有哪些 1.使用继承 Thread类方式 如下示例 结果 1.继承 Thread 类 class Crea

java多线程快速入门(四)

通过匿名内部类的方法创建多线程 package com.cppdy; //通过匿名内部类的方法创建多线程 public class ThreadDemo2 { public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 30; i++) { System.out.println("线程打印:"+i); }

java多线程快速入门(三)

//通过实现Runnable接口实现多线程 package com.cppdy; //通过实现Runnable接口实现多线程 class MyThread1 implements Runnable{ @Override public void run() { for (int i = 0; i < 30; i++) { System.out.println("线程打印:"+i); } } } public class ThreadDemo1 { public static voi

java多线程快速入门(二)

通过继承Thread类来实行多线程 package com.cppdy; //通过继承Thread类来实行多线程 class MyThread extends Thread{ @Override public void run() { for (int i = 0; i < 30; i++) { System.out.println("线程打印:"+i); } } } public class ThreadDemo { public static void main(String

java多线程快速入门(十五)

使用violate关键字解决了变量的可见性问题(volatile让多线程刷新falg的值) package com.cppdy; class MyThread11 extends Thread { //volatile让多个线程刷新falg的值 public volatile boolean falg = true; @Override public void run() { System.out.println("子线程开始执行啦"); while (falg) { } System

java多线程快速入门(二十)

1.Java.util的线程安全工具类 Vector(线程安全) ArrayList(线程不安全) HashTable(线程安全) HashMap(线程不安全) 2.将线程不安全集合变为线程安全集合 package com.cppdy; import java.util.Collections; import java.util.HashMap; import java.util.Map; public class ThreadDemo16 { public static void main(S

java多线程快速入门(二十一)

CountDownLatch(闭锁)计数器 有一个任务A,它要等待其他4个任务执行完毕之后才执行,此时就可以利用CountDownLatch来实现这种功能 package com.cppdy; import java.util.concurrent.CountDownLatch; class MyThread17 extends Thread{ private CountDownLatch countdownlatch; public MyThread17(CountDownLatch coun

java多线程快速入门(七)

什么是守护线程 守护线程是为用户线程服务的这么一个线程,主线程结束,守护线程也结束 package com.cppdy; class MyThread3 extends Thread{ @Override public void run() { System.out.println("开始执行线程"); try { sleep(1000); } catch (Exception e) { } System.out.println("结束执行线程"); } } pub

java多线程快速入门(八)

设置线程优先级:join() package com.cppdy; class MyThreadA extends Thread{ MyThreadB b; public MyThreadA(MyThreadB b) { this.b=b; } @Override public void run() { try { b.join(); sleep(1000); } catch (Exception e) { } System.out.println("A子线程执行"); } } cla