Java 线程池 学习笔记

本文介绍了Java线程池的概念,作为线程的容器,它能重复利用已创建的线程,避免频繁创建销毁带来的效率损失。核心内容包括ExecutorService接口作为线程池的接口,以及Executors类中如newFixedThreadPool等线程池的创建方法。通过submit方法提交Runnable或Callable任务到线程池执行,并介绍Future接口用于获取任务结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概念:

       我们平时都是在需要线程的时候去创建一个线程,我们这样使用非常方便,但是如果并发的线程数量很多的话,每个线程可能就执行很短的时间就结束了,那么,这样频繁的创建线程就会大大的降低系统和程序的效率,因为频繁创建和销毁线程需要很多时间。

        所以我们需要使用【线程池】

        其实就是一个容纳很多线程的容器,其中的线程可以反复使用,省去了频繁创建线程的操作,无需反复创建线程而消耗过多的资源。

        线程池思想:当我们需要使用线程的时候,就去线程池里获取一个线程来使用,使用完成之后不会销毁,而是可以继续去执行其他的任务。

二、线程池的使用

        真正的线程池接口是 java.util.concurent.ExecutorService 是一个接口

        java.util.concurent.ExecutorService

                线程工厂类里面提供了一些静态方法,生成一些常用的线程池

        Executors 类中创建线程池的方法:

            - public static ExecutorService newFixedThreadPool ( int Threads ):创建指定数量的线程的线程池

                那么,如何提交到线程池,并执行任务:ExecutorService线程池的方法:

            - public Future<?> submit(Runnable task):获取线程池中的某一线程对象,并执行任务,运行run()方法

            - <T> Future <T> submit(Callable<T> task):获取线程池中的某一个对象,并执行任务。

                  - Future ---> 用来封装线程任务执行后的返回值

                        V get() :可以获取封装的返回值

                  - Callable<V> 接口:
                        - V call() Throws Exception

        线程池的使用步骤:

                1.创建线程池,初始化线程

                2.创建任务

                3.提交任务,并执行任务

                4.销毁线程池(一般开发中不会执行)

        // 1.创建线程池,初始化两条线程
        ExecutorService pools = Executors.newFixedThreadPool(2);

        // 2.创建任务
        //MyRunnable mr = new MyRunnable();
        MyCallable mr = new MyCallable();

        // 3.提交任务,执行任务
        pools.submit(mr);
        pools.submit(mr);
        pools.submit(mr);
        pools.submit(mr);
        pools.submit(mr);

        Future<String> f = pools.submit(mr);
        try {
            System.out.println(f.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

        // 4.销毁线程池(一般开发不会使用)
        pools.shutdown();
public class MyRunnable implements Runnable{
    @Override
    public void run () {
        System.out.println(Thread.currentThread().getName() + "任务开始...");

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(Thread.currentThread().getName() + "任务结束...");
    }
}

        

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值