RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
Java【线程池】-创新互联
文章目录
  • 1. 什么是线程池
  • 2. 创建线程池
    • 2.1 ExecutorService
      • 2.1.1ThreadPoolExecutor创建线程池
      • 2.1.2 使用Callable提交任务
    • 2.2 Executors创建线程池

创新互联公司长期为上千多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为泗洪企业提供专业的成都做网站、网站设计,泗洪网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。1. 什么是线程池

线程池就是一个可以复用线程的技术。在没有线程池时,用户每发起一个请求,后台就创建一个新线程来处理,下次新任务来后又继续创建新线程。而创建新线程的开销是很大的,会严重影响系统性能。

2. 创建线程池
  • JDK5.0起提供了代表线程池的接口:ExecutorService。
  • 方式一:使用ExecutorService的实现类ThreadPoolExecutor自创建一个线程池对象。
  • 方式二:使用Executors(线程池的工具类)调用方法返回不同特点的线程池对象。
2.1 ExecutorService 2.1.1ThreadPoolExecutor创建线程池

在这里插入图片描述
什么时候创建新线程: 新任务提交时核心线程都在忙,任务队列也满了,并且还可以创建临时线程,此时才会创建临时线程。
什么时候开始拒绝任务: 核心线程和临时线程都在忙,任务队列也满了,新任务进来的时候才会开始任务拒绝。

public class ThreadPoolDemo {public static void main(String[] args) {//1、创建线程池对象
        ExecutorService pool = new ThreadPoolExecutor(3, 5, 6,
                TimeUnit.SECONDS, new ArrayBlockingQueue<>(5), Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy());
        //AbortPolicy():丢弃任务并抛出RejectedException异常,是默认策略。
        //DiscardPolicy():丢弃任务但是不抛出i长,不推荐的做法。
        //DiscardOldestPolicy():抛弃队列中等待最久的任务,然后把当前任务加入队列中。
        //CallerRunsPolicy():由主线程负责调用任务的run()方法从而跳过线程池直接执行。

        //2、创建任务
        Runnable target = new MyRunnable();
        //3、给线程池增加任务
        pool.execute(target);
        pool.execute(target);
        pool.execute(target);
        //占满五个队列
        pool.execute(target);
        pool.execute(target);
        pool.execute(target);
        pool.execute(target);
        pool.execute(target);
        //开始创建临时线程
        pool.execute(target);
        pool.execute(target);
        //超过等待(大线程数+大等待队列数),开始拒绝
        //pool.execute(target);
        //关闭线程池(开发中一般不使用)
        pool.shutdown();//等待全部任务执行完毕之后再关闭
        pool.shutdownNow();//立即关闭,即使任务没有完成,丢失任务!
    }
}
2.1.2 使用Callable提交任务
//使用线程池对象的submit()方法提交Callable任务,并用FutureTask的父类接收对象
	Futuref1 = pool.submit(new MyCallable(100));
	//输出任务执行后的返回结果
	System.out.println(f1.get());
2.2 Executors创建线程池

大型并发系统环境中使用Executors如果不注意可能会出现系统风险。
在这里插入图片描述

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文名称:Java【线程池】-创新互联
分享链接:http://lswzjz.com/article/dcdgjo.html