创建多线程的方法之使用线程池

创建多线程


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

前面我们已经了解过创建多线程的三种方式,继承Thread类,实现Runnable、Callable接口,但是当我们面对经常创建、销毁线程的时候,会显得十分麻烦,并且对性能的影响也很大,所以就要使用线程池来实现多线程。


一、线程池的初衷

我们提前创建好多个线程,然后把它们放到线程池当中,使用的时候直接获取,使用完毕后再重新放入线程池中,这样能避免频繁创建和销毁线程,以此来实现重复利用。

二、创建线程池

1.线程池相关API

/*
* ExecutorService:真正的线程池接口,常见子类ExecutorService和Executors
* 	void execute(Runnable command):执行命令,没有返回值,一般用来执行Runnable
* 	<T>Future<T>submit(Callable<T>task):执行任务,有返回值,一般用来执行Callable
* 	void shutdown():关闭连接池
* Executor:工具类、线程池的工厂类,用于创建并返回不同类型的线程池
* 	Executors.newCachedThreadPool():创建一个可根据需要创建新线程的线程池
* 	Executors.newFixedThreadPool(n):创建一个可重用固定线程数的线程池
* 	Executors.newSingleThreadExecutor():创建一个只有一个线程的线程池
* 	Executors.newScheduledThreadPool():创建一个线程池,它可安排再给定延迟后运行明空或者定期地执行
*/

2.代码实现

代码如下:

class NumThread1 implements Runnable{

    @Override
    public void run() {
        for (int i=0;i<=100;i++){
            if (i % 2 ==0){
                System.out.println(Thread.currentThread().getName() + ":" +i);
            }
        }
    }
}
class NumThread2 implements Runnable{

    @Override
    public void run() {
        for (int i=0;i<=100;i++){
            if (i % 2 !=0){
                System.out.println(Thread.currentThread().getName() + ":" +i);
            }
        }
    }
}

public class ThreadPool {
    public static void main(String[] args) {

        ExecutorService service = Executors.newFixedThreadPool(10);
        service.execute(new NumThread1());
        service.execute(new NumThread2());
        service.shutdown();
    }
}

三、使用线程池的好处

  • 提高响应速度(减少了创建新线程的时间)

  • 降低了资源消耗(重复利用,不需要每次创建)

  • 便于线程管理

  • corePoolSize:核心池的大小

  • maximumPoolSize:最大线程数

  • keepAliveTime:线程没有任务时最多保持多长时间后会终止

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值