线程池

本文深入探讨了线程池的概念及其在减少线程创建和销毁开销、提高系统效率方面的重要作用。通过对比单线程执行任务的缺点,阐述了线程池如何通过重复利用线程来提升资源利用率。文章提供了使用Runnable和Callable接口实现线程池的具体代码示例,展示了如何通过ExecutorService创建固定大小的线程池,并执行长时间运行或短期任务。

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

线程池

只创建一个线程执行一个任务的缺点:
我们创建一个线程执行任务后线程死亡.
如果线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。

定义

线程池就是存放线程的容器.

线程池的优点

线程池里面的线程不会销毁,可以重复使用.减少了线程的创建和销毁,提高线程的利用率,节省了资源

Runnable实现线程池

定义继承Runnable的类,并重写run方法

public class MyRunnable implements  Runnable{
    private String name;

    @Override

    public void run() {
        while (true){

        name = Thread.currentThread().getName();
        System.out.println(name+"正在执行任务");
        }


    }
}
public static void main(String[] args) {

    ExecutorService ex = Executors.newFixedThreadPool(3);//创建容量为3的线程池

    MyRunnable mr = new MyRunnable();//实例化Runnable对象

    ex.submit(mr);//将对象提交到线程池中运行
    ex.submit(mr);
    ex.submit(mr);

}

Callable实现线程池

步骤

    1.创建线程池
    2.定义类实现Callable
    3.重写call方法
    4.创建实现类对象
    5.提交任务
    6.通过Future对象的get方法得到返回值

代码实例

public class MyCallable implements Callable {

    private  int sum;

    @Override
    public Object call() throws Exception {

        for (int i = 1; i <= 100; i++) {

            sum += i;

        }
        return sum;
    }
}
public class Demo {

    public static void main(String[] args) throws ExecutionException, InterruptedException {

        MyCallable mc = new MyCallable();

        ExecutorService pool = Executors.newFixedThreadPool(2);

        Future<Integer> future = pool.submit(mc);

        Integer e = future.get();

        System.out.println(e);
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值