美文网首页
为什么使用线程池而不使用new Thread(runnable)

为什么使用线程池而不使用new Thread(runnable)

作者: 鼾声鼾语 | 来源:发表于2019-12-04 08:25 被阅读0次

    1、每次new Thread,新建对象性能差
    2、缺乏统一管理,可能导致线程创建过多,死机等。
    3、缺乏更多功能,如:定时执行,定期执行,线程中断等。
    4种线程池:

    Java通过Executors提供四种线程池,分别为:
    1、newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需求,可以灵活回收空闲线程,若无可回收则新建线程。
    2、newFixedThreadPool创建一个定长线程池,可以控制线程最大并发数,超过的线程会在队列中等待。
    3、newScheduledThreadPool创建一个定长线程池,支持定时及周期性任务执行。
    4、newSingleThreadExecutor创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序执行。
    示例:1、2、3、4

    1、newCachedThreadPool

    ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
    cachedThreadPool.execute(new Runnable() {
         @Override
         public void run() {
            //do something
         }
    });
    

    2、newFixedThreadPool

    ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
    fixedThreadPool.execute(new Runnable() {
          @Override
          public void run() {
              //do something
          }
    });
    

    3、newScheduledThreadPool

    //延迟三秒执行
    ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
    scheduledThreadPool.schedule(new Runnable() {
         @Override
         public void run() {
               //do something
         }
    }, 3, TimeUnit.SECONDS);
     
    //表示延迟1秒后每隔3秒钟执行一次
    scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            //do something
        }
    }, 1, 3, TimeUnit.SECONDS);
    

    4、newSingleThreadExecutor

    ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
    singleThreadExecutor.execute(new Runnable() {
        @Override
        public void run() {
            //do something
        }
    });
    

    相关文章

      网友评论

          本文标题:为什么使用线程池而不使用new Thread(runnable)

          本文链接:https://www.haomeiwen.com/subject/ntdkgctx.html