java学习日记 线程池

    技术2026-02-09  3

    JAVA学习 线程池

    线程池思想使用方法概念代码实现

    线程池

    思想

    使用线程的时候就创建一个线程,会出现问题: 如果并发的线程数量很多,而且每个线程都只执行了一个时间很短的任务,这么频繁的创建线程就会大大降低系统的效率,会耗费很多时间创建和销毁线程。

    线程池的思想就是为了解决这个问题,使线程可以复用,就是执行完一个任务不销毁而是继续执行其他任务。

    线程池(容器)–》集合

    使用方法

    程序第一次启动的时候,创建多个线程,保存到一个集合中。需要线程的时候,就可以从集合中取出使用 Thread t=list.remove(0);返回的是被移除的元素(线程只能被一个任务使用) thread t=linked.removeFirst(); 当我们使用完毕线程 要把线程归还 list.add(t); linked.addLast(t);

    在jdk 1.5之后内置了线程池,可以直接使用

    概念

    线程池:容纳多个线程的容器,其中线程可以多次复用。

    合理使用好处:

    降低资源消耗。提高响应速度,不需要等到线程创建。提高线程管理。

    代码实现

    主类test

    package project; /* * JAVA内置线程池的工厂类 用来生成线程池 * java.util.concurrent.Executor; * 生成线程池的静态方法 * static ExecutorService newFixedThreadPool(int nThreads)创建一个可重用线程数的线程池 * 参数: * int nThreads:创建线程池中线程的数量 * 返回值: * ExecutorService 返回的是ExecutorService接口的实现类对象,我们可以使用ExecutorService接口接收(面向接口编程) * * 用来从线程池中获取线程,调用start方法执行线程任务 * submit(Runnable task)提交一个Runnable任务用于执行 * 关闭/撤销线程池 * void shutdown() * * 线程池使用步骤: * 1.使用工厂类Executors里提供的静态方法newFixedThreadPool生产一个指定线程数量的线程池 * 2.创建一个类 实现Runnable接口 重新run方法 设置线程任务 * 3.调用Executors中的方法submit 传递线程任务(实现类) 开启线程 执行run方法 * 4.调用Executors中的方法shutdown销毁线程池(不建议执行) */ import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class test{ public static void main(String[] args) { //1.使用工厂类Executors里提供的静态方法newFixedThreadPool生产一个指定线程数量的线程池 ExecutorService esExecutors=Executors.newFixedThreadPool(2); //3.调用Executors中的方法submit 传递线程任务(实现类) 开启线程 执行run方法 esExecutors.submit(new test01());//pool-1-thread-2创建了一个新的线程 //线程池会一直开启,使用完了线程会自动归还给线程池,线程池就可以继续使用 esExecutors.submit(new test01());//pool-1-thread-1创建了一个新的线程 esExecutors.submit(new test01());//pool-1-thread-2创建了一个新的线程 //4.调用Executors中的方法shutdown销毁线程池(不建议执行) esExecutors.shutdown(); //上一步关闭了线程池,所以在调用线程就会报错 esExecutors.submit(new test01()); } }

    实现类test01

    package project; import com.sun.org.apache.xalan.internal.xsltc.compiler.sym; public class test01 implements Runnable{ @Override public void run() { // 2.创建一个类 实现Runnable接口 重新run方法 设置线程任务 System.out.println(Thread.currentThread().getName()+"创建了一个新的线程"); } }

    三个进程运行结果:

    在调用三个进程之后关闭线程池再调用:

    Processed: 0.038, SQL: 9