java面试:多线程与并发

关键词

多线程,并发,线程池

多线程

Q:如何新建一个线程?
继承Thread,或者实现Runnable接口,或者通过Callable接口实现
Q:线程池有没有了解过?为什么要用线程池?
新建线程的开销太大了,使用线程池可以节省系统资源。
Q:线程池的参数有哪些?

  • 参数如下:
    public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit, BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler);
  • corePoolSize:核心池的大小
  • maximumPoolSize:线程池的最大线程数,它表示在线程池中最多能创建多少个线程;
  • keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止。
  • unit:参数keepAliveTime的时间单位
  • workQueue:一个阻塞队列,用来存储等待执行的任务。
  • handler:执行拒绝策略的对象,也就是拒绝任务处理器。
    ThreadPoolExecutor.AbortPolicy: 丢弃任务并抛出RejectedExecutionException异常。 (默认) ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。 ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程) ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务
  • threadFactory: 定义如何启动一个线程,可以设置线程的名称,并且可以确定是否是后台线程等。

Q:线程池有哪些类型?有什么不同?

并发

Q:线程安全是什么?
Q:同步有哪些?
Q:锁有哪些?
Q:AQS有没有了解过

未完待续

猜你喜欢

转载自www.cnblogs.com/expiator/p/10193315.html