打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
java_线程池

血一样的教训,今天上午参加了一家现场面试java。在这之前,我一直认为我的java基础还是可以的,而今天一问三不知。现在将面试的问题整理出来

一、说说java中的线程池?

  1.线程池:线程池是线程的集合,不用自己创建线程,把线程直接给线程池,由线程池处理。

      2.过程:首先,使用线程池可以重复利用已有的线程继续执行任务,避免线程在创建和销毁时造成的消耗。

               其次,由于没有线程创建和销毁时的消耗,可以提高系统响应速度。

     最后,通过线程可以对线程进行合理的管理,根据系统的承受能力调整可运行线程数量的大小等。

      3.用线程池的例子:

package com.company;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/*线程池*/public class ThreadPool implements Runnable{         @Override         public void run() {             System.out.println(Thread.currentThread().getName());         }      public static void main(String[] args) {          ExecutorService executorService = Executors.newFixedThreadPool(2);          Runnable runnable1 = new ThreadPool();          Runnable runnable2 = new ThreadPool();          Runnable runnable3 = new ThreadPool();          Runnable runnable4 = new ThreadPool();          Runnable runnable5 = new ThreadPool();          executorService.execute(runnable1);          executorService.execute(runnable2);          executorService.execute(runnable3);          executorService.execute(runnable4);          executorService.execute(runnable5);      }}

 运行结果:从中可以看出来,线程池能够限制跑几个线程。案例中只能跑起来线程1和线程2

 

 

   4.线程池中状态的转换:

 

   线程池有五种状态RUNNING,SHUTDOWN,STOP,TIDYING,TERMINATED。线程池的状态可操作的其实只有两种状态   

    RUNNING: 运行状态。线程一旦被创建就会处于此状态,此状态时正常的运行状态,能够接收新的任务并处理任务。

    SHUTDOWN:关闭状态。SHUTDOWN,TOP,TIDYING三个状态都是中间状态。RUNNING调用shutdown()方法进入SHUTDOWN关闭状态。不能接受新的任务,将正在执行的任务处理完毕后进入到TIDYING整理状态,

    STOP:停止状态。RUNNING调用shutdownNow()进入STOP关闭状态。不接受任务,也不处理任务,直接中断任务,然后进入到TIDYING整理状态,

    TIDYING:整理状态。会自动调用terminate方法,调用完后进入到终止状态。

    5.线程池方法中的参数(对线程池中进行约束)

public ThreadPoolExecutor(int corePoolSize,                              int maximumPoolSize,                              long keepAliveTime,                              TimeUnit unit,                              BlockingQueue<Runnable> workQueue,                              ThreadFactory threadFactory,                              RejectedExecutionHandler handler) {        if (corePoolSize < 0 ||            maximumPoolSize <= 0 ||            maximumPoolSize < corePoolSize ||            keepAliveTime < 0)            throw new IllegalArgumentException();        if (workQueue == null || threadFactory == null || handler == null)            throw new NullPointerException();        this.corePoolSize = corePoolSize;        this.maximumPoolSize = maximumPoolSize;        this.workQueue = workQueue;        this.keepAliveTime = unit.toNanos(keepAliveTime);        this.threadFactory = threadFactory;        this.handler = handler;    }

corePoolSize:核心池大小,表示线程池正常情况下能运行的线程最大多少。
maximumPoolSize:最大池大小,表示线程池最大能运行的线程数。
keepAliveTime:表示线程执行任务后的空闲存活时间,过了这个时间线程将被销毁,这个参数的存在也直接实现了概述中所说的前两点优点,线程的消耗可以分为A,B,C三个阶段,A代表创建,B代表执行,C代表消耗,如果有很多个任务需要执行时,B执行所带来的消耗代价小于A,C所带来的消耗代价,那么就通过这个参数,让线程保持一段存活时间,方便执行后面的任务。
unit:线程空闲存活时间的单位。
workQueue:这个是任务队列,将后面的任务加入到这个队列中。
threadFactory:真正用于创建线程的参数。
handler:表示已经不能在接收任务时,调用的处理类。

 

来源:https://www.icode9.com/content-1-513451.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
java线程池的实现原理
【Concurrent】JDK8线程池(一次记不住就收藏下来慢慢看吧!)
快速搞定线程池源码
万字长文爆肝线程池
线程池,这一篇或许就够了
Android 并发二三事之Java线程池
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服