Executors工具类 4种获取线程池服务对象的方法

本文介绍了Java中通过Executors工具类获取线程池服务的4种方式:newFixedThreadPool、newSingleThreadExecutor、newCachedThreadPool和newScheduledThreadPool,并详细解析了它们的工作原理和应用场景。特别是newScheduledThreadPool,它能设置线程调度间隔,有助于减少服务器压力。

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

java中目前我只了解4 种获得多线程的方法 :

1.继承Thread类 ,重写run方法

2.new Thread(实现Runnable接口)

3. FutureTask ft = new FutureTask<Integer>(new MyThread());
new Thread(ft).start();             

MyThread自己写的   实现了Callable<>接口

FutureTask<>本身就实现了Runable接口

4. 通过工具类  Executors 获得线程池 

先说四种常用方法:

ExecutorService service = Executors.newFixedThreadPool(5);// 一池5线程
ExecutorService service = Executors.newSingleThreadExecutor();// 一池1线程
ExecutorService service = Executors.newCachedThreadPool();//根据当前任务量自动调节池中线程数

ScheduledExecutorService service = Executors.newScheduledThreadPool(5);//一池5线程

前三个开启线程的方法是 :

Future<T> result = service.submit( 实现 Callable<T> 接口)

然后用得到的 result.get()    获取 call()方法的返回值.

最后一个有点特殊:

ScheduledFuture<T> result = service.schedule ( 实现 Callable<T> 接口, 秒数, TimeUnit.SECONDS);  

这个schedule方法有什么不同呢?

他可以设定从该线程池中获得线程的最小间隔时间,比如规定100毫秒内只允许请求使用一个线程,其他请求就等着

这样可以大大的减少服务器压力

三个参数:  

 第一个不用讲了.    

 第二个 需要整数,获得线程的最小间隔时间.   

第三个参数是TimeUnit枚举类型 设置第二个参数的单位

下面是代码:

import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;


/**
 * 获得线程池的四种方式
 * @author start_lie
 */
public class Test3
{
	public static void main(String[] args)
	{
		ScheduledExecutorService service = Executors.newScheduledThreadPool(5);//一池5线程
		ScheduledFuture<Integer> result = null;
		try 
		{
			for (int i = 1; i <=15; i++) 
			{
				result = service.schedule(() -> {
					System.out.print(Thread.currentThread().getName());
					return new Random().nextInt(30);
				}, 2, TimeUnit.SECONDS);
				System.out.println("*******result: "+result.get());
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			service.shutdown();
		}
	}

	private static void testThreadPool()
	{
		//ExecutorService service = Executors.newFixedThreadPool(5);//一池5线程
		//ExecutorService service = Executors.newSingleThreadExecutor();//一池1线程
		ExecutorService service = Executors.newCachedThreadPool();
		Future<Integer> result = null;
		try 
		{
			for (int i = 1; i <=15; i++) 
			{
				result = service.submit(() -> {
					System.out.print(Thread.currentThread().getName());
					return new Random().nextInt(30);
				});
				System.out.println("*******result: "+result.get());
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			service.shutdown();
		}
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值