线程池的创建及使用

线程池的三种创建方式

  1. 创建固定大小的线程池
ExecutorService pool = Executors.newFixedThreadPool(2);
Runnable task = new Runnable() {
    @Override
    public void run() {
        while (true) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName());
        }
    }
};
pool.execute(task);
pool.execute(task);
pool.execute(task);//线程池的带下只有两个   现在这个任务在其等待队列中排队等候
  1. 创建可变大小的线程池
ExecutorService pool = Executors.newCachedThreadPool();
Runnable task = new Runnable() {
    @Override
    public void run() {
        while (true) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName());
        }
    }
};
pool.execute(task);
pool.execute(task);
pool.execute(task);
  1. 创建独立任务的线程池
ExecutorService pool = Executors.newSingleThreadExecutor();
Runnable task = new Runnable() {
    @Override
    public void run() {
        while (true) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName());
        }
    }
};
pool.execute(task);
pool.execute(task);
pool.execute(task);
线程池的创建用到的具体函数和方法
创建固定大小容量的线程池ExecutorService pool = Executors.newFixedThreadpool()
创建可变大小的线程池ExecutorService pool = Executors.newCachedThreadPool()
创建独立任务的线程池ExecutorServce pool = Executors.newSingleThreadExecutor()
Java中,线程池是一种管理线程的技术,它可以复用已经存在的线程,而不是每次都创建新的线程,从而提高程序性能、降低资源消耗。以下是创建使用Java线程池的基本步骤: 1. **创建线程池**: - 使用`java.util.concurrent`包下的`ThreadPoolExecutor`类,可以指定核心线程数(最小线程数,保证立即处理请求)、最大线程数(最多同时运行的线程数)、任务队列(存储待处理的任务)以及线程工厂(用于创建新线程)。 ```java ThreadPoolExecutor executor = new ThreadPoolExecutor( corePoolSize, // 核心线程数 maximumPoolSize, // 最大线程数 keepAliveTime, // 空闲时间,超过这个时间未执行的任务会被放入缓存 TimeUnit.MILLISECONDS, // 时间单位 workQueue, // 任务队列 threadFactory, // 线程工厂 handler // 容纳策略,默认阻塞等待 ); ``` 2. **提交任务**: 使用`execute()`方法将Runnable任务或Callable任务添加到线程池。如果是Callable任务,还可以获取Future对象以获取结果或检查是否已完成。 ```java executor.execute(runnableTask); // Runnable任务 executor.submit(callableTask); // Callable任务,返回Future对象 ``` 3. **关闭线程池**: 当不再需要线程池时,调用`shutdown()`来停止接受新任务,已有的任务继续执行直到完成,然后会抛出RejectedExecutionException异常。如果希望优雅地结束,可以使用`shutdownNow()`强制中断正在运行的任务并关闭线程池。 ```java executor.shutdown(); // 非阻塞 // 或者 executor.shutdownNow(); // 强制中断并关闭 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AcerMr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值