Executors工具类

方法名称

public  static Executorservice newFixedThreadPool(int nThread) 创建固定线程数量的线程池,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程代替它

public satic ExecutorService newCachedthreadPool()  线程数量随着任务增加而增加,如果线程执行完毕却空闲了一段时间则会被回收

public static ExecutorService newsSingleThreadExecutor()  创建只有一个线程的线程池对象,如果该线程出现异常而结束,那么线程池会补充一个线程

public satic ScheduleExecutorService  newScheduledThreadPool(int corePoolSize)  创建一个线程池,可以实现在给定的延时后运行任务,或者定期执行任务、

注意:Executors的底层也是基于线程池的实现类ThreadPoolExecutor创建线程池对象的

 

package domeExecutor;

public class MyThread implements Runnable {

	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println(Thread.currentThread().getName()+"输出");
		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	

}
package domeExecutor;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ExecutorService  pool=Executors.newFixedThreadPool(3);
		pool.execute(new MyThread());
		pool.execute(new MyThread());
		pool.execute(new MyThread());
		//如果前面3个线程被占用,将不会后面的
		pool.execute(new MyThread());

	}

}

Executors返回的线程池对象弊端如下:

FixedThreadPool和SingleThreadPool:允许的请求队列长度为Integer.MAX_VALUE,可能会堆积大量请求,从而导致OOM

CachedThreadPool和ScheduleThreadPool:允许的线程数量为:Integer.MAX_VALUE,可能会创建大量的线程,从而导致OOM

Executors是否适合做大型互联网场景的线程池方案?

不适合

建议使用ThreadPoolExecutor来指定线程池参数,这样可以明确线程池运行规则,避免资源耗尽的风险

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小萌新上大分

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

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

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

打赏作者

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

抵扣说明:

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

余额充值