首页 > 编程语言 >Java实时数据处理之三-池化技术(线程池 & 对象池)

Java实时数据处理之三-池化技术(线程池 & 对象池)

时间:2023-01-22 18:44:06浏览次数:76  
标签:Java stmts device1 device2 池化 new 线程 多线程

线程池使用步骤:

1、自定义线程池

private ThreadPoolExecutor executor;

    /**
     * 初始化线程池
     */
    @PostConstruct
    private void init(){
        int processors = Runtime.getRuntime().availableProcessors();
        int corePoolSize = processors * 2;
        LinkedBlockingQueue queue = new LinkedBlockingQueue();
        // 自定义线程池
        executor = new ThreadPoolExecutor(corePoolSize, corePoolSize * 2,
                60, TimeUnit.SECONDS, queue, new ThreadPoolDemoFactory("demo"));
        log.info("CorePoolSize: {}", executor.getCorePoolSize());
        log.info("MaximumPoolSize: {}", executor.getMaximumPoolSize());

    }
View Code

2、给多线程构造任务

   /**
     * 使用多线程,批量插入数据到MySql
     */
    @RequestMapping("/")
    private void batchSave2MySql() throws SQLException {
        // 创建一个存储CompletableFuture的数组,存储异步调用的对象
        List<CompletableFuture<?>> futures = new ArrayList<>(1000000);
        Connection conn = MySqlUtils.getConn();
        Device device1 = new Device();
        Device device2 = new Device();
        device1.setName("device1");
        device1.setTypeId(1);
        device2.setName("device2");
        device2.setTypeId(2);
        List<Device> list = Lists.newArrayList();
        list.add(device1);
        list.add(device2);
        // 给多线程构造任务
        for(Device device : list){
            PreparedStatement stmts = conn.prepareStatement
                    ("insert into device values(?,?,?)");
            stmts.setString(1, UUID.randomUUID().toString());
            stmts.setString(2, device.getName());
            stmts.setInt(3, device.getTypeId());
            // 多线程执行后的返回结果在哪??
            CompletableFuture future = CompletableFuture.supplyAsync(() -> {
                try {
                    return stmts.execute();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }, executor);
            futures.add(future);
        }

    }
View Code

3、多线程执行(自动)

git:https://gitee.com/caesarthegreat/thread-pool-demo.git

标签:Java,stmts,device1,device2,池化,new,线程,多线程
From: https://www.cnblogs.com/caesar-the-great/p/17064567.html

相关文章

  • Java千问25:关于Java类的构造方法,看这一篇就够了!
    ​Java语言中,类的构造方法是一种很特殊的方法。关于构造方法要记忆和理解的知识点其实挺多的,下面我们就来详细的讲讲构造方法,相信看过这篇文章之后,你会对构造方法有一个比较......
  • java中隐藏不想返回的字段信息
    场景:有时候我们返回给前端的数据是包含null的,而这些为null的值前端也不好处理,所以我们就没必要把null值返回给前端,一般登录都会用到账号和密码,这时隐藏密码字段也是常规操......
  • Java创建线程的4种方式
    继承Thread类,重写run方法Thread类实现了Runnable接口(只有一个没有返回值的run方法)。publicclassThreadDemoextendsThread{publicThreadDemo(Stringname){......
  • JavaScript中的空值合并操作符【??】和可选链操作符【?.】的理解和使用
    参考:http://t.csdn.cn/5700Y??-空值合并操作符结构:eg:letres=num01??num02;??当左侧的变量为null或undefined的时,返回左侧num02否则返回自身num01(num01相当于nu......
  • 利用java来实现计算器的加减乘除
    packagebag; importjava.util.Scanner; publicclassDemo06{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(System.in);System......
  • 跟我20天学Java:02-自动类型转换,表达式的自动类型转换,强制类型转换
    文章目录​​学习目标​​​​一、什么是自动类型转换,为什么要学习自动类型转换?​​​​总结​​​​二、表达式的自动类型转换​​​​总结​​​​三、强制转化类型​​​......
  • JavaScript 循环引用
    JavaScript中的循环引用是指两个或多个对象之间相互引用的情况。这种情况下,这些对象就不能被垃圾回收机制正常回收,会导致内存泄漏。循环引用通常发生在对象之间相互包含......
  • Java有关数组对象越界的问题?
    提问: 我写了一个房屋出租系统,里面有房主的姓名,电话,地址,房号id和出租状态请问一下,再新增房屋的时候,都先判断一下房屋够不够,如果不够,那就新增一个数组来进行扩容,但是扩容新......
  • JavaScript学习笔记—数组
    1.描述数组也是一种复合数据类型,在数组中可以存储多个不同类型的数据数组中存储的是有序的数据,数组中的每个数据都有一个唯一的索引,可以通过索引来操作获取数据数组中......
  • JavaScript 内存管理及垃圾回收
    一、内存管理JavaScript是一种自动垃圾回收语言,这意味着JavaScript引擎会自动监测和清理无用的内存。JavaScript中的内存管理主要由JavaScript引擎负责,开发人员不......