前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >多线程的简单实现和应用场景

多线程的简单实现和应用场景

作者头像
余生大大
发布2022-10-25 14:29:11
2190
发布2022-10-25 14:29:11
举报
文章被收录于专栏:余生大大

main方法测试,定义for循环造假数据,定义time在方法结束后时间相减获取执行毫秒数,单线程跟多线程对比执行时间。

上图

我定义了2000000的数据量,可以看到单线程执行时间为6520毫秒,多线程(3个)执行时间为3000毫秒左右,执行速度快了一半,所以在大数据量的查询和插入时可以根据需求使用多线程。(注意线程同步和线程锁的使用:synchronized,否则可能会出现多线程对同一数据进行重复操作,违背数据原子性的情况)

上代码,直接拷贝两个类的代码即可执行测试多线程的使用

getData(主执行类)

代码语言:javascript
复制
package com.springboot.demo.multithreading;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class getData {

    public static int total = 2000000;// 定义循环次数
    
    public static void main(String[] args) {
        System.err.println("下面为单线程执行时间------------------------");
        long time = new Date().getTime();// 获得执行请求的开始time值
        getData d = new getData();

        // 获取数据
        List<Map<String,Object>> list = d.getData();
        List<Map<String,Object>> list2 = d.getData2();
        List<Map<String,Object>> list3 = d.getData3();
        
        // 输出数量和执行时间
        System.err.println("1:"+list.size()+" 2:"+list2.size()+" 3:"+list3.size());
        System.err.println("耗时"+(new Date().getTime()-time)+"毫秒");
        
        System.err.println("下面为多线程执行时间------------------------");
        
        // 多线程执行方法
        getDataThread.get();
    }
    
    public List<Map<String,Object>> getData(){
        List<Map<String,Object>> list = new ArrayList<>();
        for (int i = 0; i < total; i++) {
            Map<String,Object> map = new HashMap<>();
            map.put("date", new Date().getTime());
            map.put("i", 1);
            list.add(map);
        }
        return list;
    }
    
    public List<Map<String,Object>> getData2(){
        List<Map<String,Object>> list = new ArrayList<>();
        for (int i = 0; i < total; i++) {
            Map<String,Object> map = new HashMap<>();
            map.put("date", new Date().getTime());
            map.put("i", 2);
            list.add(map);
        }
        return list;
    }
    
    public List<Map<String,Object>> getData3(){
        List<Map<String,Object>> list = new ArrayList<>();
        for (int i = 0; i < total; i++) {
            Map<String,Object> map = new HashMap<>();
            map.put("date", new Date().getTime());
            map.put("i", 3);
            list.add(map);
        }
        return list;
    }
}

getDataThread (多线程类)

代码语言:javascript
复制
package com.springboot.demo.multithreading;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class getDataThread implements Runnable{

    private static long time;

    
    @Override
    public void run() {
        // 根据传递参数多线程查询不同数据
        if (Thread.currentThread().getName().equals("1")) {
            System.err.println("线程1:数据量"+getData().size()+" 耗时:"+(new Date().getTime()-time));
        }
        if (Thread.currentThread().getName().equals("2")) {
            System.err.println("线程2:数据量"+getData2().size()+" 耗时:"+(new Date().getTime()-time));
        }
        if (Thread.currentThread().getName().equals("3")) {
            System.err.println("线程3:数据量"+getData3().size()+" 耗时:"+(new Date().getTime()-time));
        }
    }

     public static void get() {
         time = new Date().getTime();// 定义方法开始时间
         getDataThread thread = new getDataThread(); 
         // 定义3个线程执行
         Thread t1 = new Thread(thread, "1");
         Thread t2 = new Thread(thread, "2");
         Thread t3 = new Thread(thread, "3");
         t1.start();
         t2.start();
         t3.start();
    }
     
     public List<Map<String,Object>> getData(){
            List<Map<String,Object>> list = new ArrayList<>();
            for (int i = 0; i < getData.total; i++) {
                Map<String,Object> map = new HashMap<>();
                map.put("date", new Date().getTime());
                map.put("i", 1);
                list.add(map);
            }
            return list;
        }
        
        public List<Map<String,Object>> getData2(){
            List<Map<String,Object>> list = new ArrayList<>();
            for (int i = 0; i < getData.total; i++) {
                Map<String,Object> map = new HashMap<>();
                map.put("date", new Date().getTime());
                map.put("i", 2);
                list.add(map);
            }
            return list;
        }
        
        public List<Map<String,Object>> getData3(){
            List<Map<String,Object>> list = new ArrayList<>();
            for (int i = 0; i < getData.total; i++) {
                Map<String,Object> map = new HashMap<>();
                map.put("date", new Date().getTime());
                map.put("i", 3);
                list.add(map);
            }
            return list;
        }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档