最近在深入学习多线程方面的知识,关于多线程,我们在开发中常用到的是用线程池去处理各种业务逻辑
譬如 一段大的集合对象,想要快速的插入到数据库,我们可以循环插入,也可以用线程池的方式来同时插入
或者是 调用接口,每个对象一次次的调用接口 ,也可以使用多线程来调用接口
下面这段代码 可以处理这个问题
package com.demo; import java.util.LinkedList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class ThreadPool2 { public static void main(String[] args) { /** * 线程池数量 */ int corePoolSize = 10; /** * 最大线程池数 */ int maximumPoolSize = 100; //ExecutorService threadPool = new ThreadPoolExecutor(corePoolSize,maximumPoolSize, 30, TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>()); ExecutorService threadPool =Executors.newFixedThreadPool(4); String dao = "dao"; List<String> list = new LinkedList<String>(); for (int i = 0; i < 10; i++) { list.add(i + ""); } Task task = null; for (String str : list) { task = new Task(dao, str); threadPool.execute(task); } threadPool.shutdown(); } } class Task implements Runnable { /** * 注入DAo */ private String dao; /** * 注入BEAn */ private String bean; public Task(String dao, String bean) { this.dao = dao; this.bean = bean; } public void run() { try { //TimeUnit.SECONDS.sleep(1); System.out.println("线程名称 :"+Thread.currentThread() +"--线程激活数量--"+Thread.activeCount()+"---"); System.out.println(dao + "--插入到数据库中---" + bean); } catch (Exception e) { e.printStackTrace(); } } }
时间: 2024-10-12 02:20:20