码迷,mamicode.com
首页 > 编程语言 > 详细

线程池

时间:2017-12-11 18:40:27      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:根据   空闲   scheduled   let   lex   最大   cached   unit   帮助   

1、为什么要创建线程池?

    1)   java中一个请求创建一个线程,他的创建和销毁开销是很大的,如果在jvm中创建太多线程会过度消耗内存导致内存不足。

    2)   活动的线程是消耗资源的,如果线程的数量得不到限制,那么当服务端与很多客户端通信,会创建大量的线程,导致内存空间不足,影响使用。

2、Executor

    帮助开发人员有效地进行线程控制。

    1)  newFixedThreadPool()方法,该方法返回一个固定数量的线程池。当有个一任务提交时,若线程池中空闲则立刻执行,若没有,会被暂缓在一个任务队列中等待有空闲的线程去执行。

    2)  newSingleThreadExecutor()方法,创建一个线程的线程池,若空闲执行,若没有,暂缓到任务队列中等待执行。

    3)  newCachedThreadPool()方法,返回一个可根据实际情况吊证线程个数的线程池,不限制最大线程数量,若有空闲线程,执行,没有创建。并且每个空闲线程会在60秒钟自动回收。

   4)  newScheduledThreadPool()方法,该方法返回一个ScheduledExecutorService对象,但该线程池可以指定线程池的数量。

   5)  自定义线程池:

 public static void main(String[] args) {
        ThreadPoolExecutor executor = new
                ThreadPoolExecutor(1,2,60,
                TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(3),
                new ThreadPoolExecutor.DiscardOldestPolicy());
        Task task1 = new Task("一号窗口:");
        Task task2 = new Task("二号窗口:");
        Task task3 = new Task("三号窗口:");
        Task task4 = new Task("四号窗口:");
        Task task5 = new Task("五号窗口:");
        Task task6 = new Task("六号窗口:");
        executor.execute(task1);
        executor.execute(task2);
        executor.execute(task3);
        executor.execute(task4);
        executor.execute(task5);
        executor.execute(task6);
    }

一、继承Thread类和实现Runnable接口创建线程的区别?

java支持单继承多实现,在实现runnable接口用Thread构造方法创建线程时,可以共享一个runnable对象,可实现资源共享。

而Thread不行,需要去定义静态变量。一个是多线程分别去完成自己的任务,一个是多个线程共同完成一个任务。

 

线程池

标签:根据   空闲   scheduled   let   lex   最大   cached   unit   帮助   

原文地址:http://www.cnblogs.com/gyll/p/8024140.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!