面试篇:杂乱篇

 String s = " ";

1. String类的常用方法有哪些?

  1. s.length():               返回字符串长度
  2. s.substring():          截取字符串
  3. s.split():                  分割字符串
  4. s.equlas():              字符串比较
  5. s.chatAt():               返回指定索引处的字符

2. 说一下synchronized底层实现原理

答:它底层是由monitor实现的,monitor是jvm级别的对象(使用c++编写的),线程获得锁需要用对象关联monitor。  monitor有三个属性:owner, entrylist, waitset.

        其中:owner是关联获得锁的线程,并且只能关联一个线程,而entrylist是关联处于阻塞状态的线程,waitset是关联处于等待状态的线程

3.线程池的七个参数是什么?执行原理是什么?

 答:七个参数:

        1. 核心线程数

        2.最大线程数

        3.线程存活时间

        4.线程存活时间的单位

        5.工作队列

        6.线程工厂

        7.拒绝策略

                        

执行原理:当一个任务来了之后,会先去判断一下核心线程数是否已满,如果没有满,直接添加到工作线程去执行,如果已经满了,则添加到阻塞队列,如果阻塞队列也满了,则判断是否达到最大线程数,如果没达到,则创建临时线程来执行,如果已经达到了最大线程数,那就直接根据拒绝策略来拒绝。

4.线程池有哪些常见的阻塞队列?

BlockingQueue有这几种类型:ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、DelayedWorkQueue。

5. 线程池有哪些种类?

在JUC包下有Excutors类中提供了很多创建连接池的静态方法,常见的有四种:

1. newFixedThreadPool(int nThreads)

特点:

  • 核心线程数 == 最大线程数
  • 阻塞队列使用的是LinkedBlockingQueue
  • 适用于任务数已知,比较耗时的任务

2. newSingleThreadExcutors()

特点:

  • 核心线程数 == 最大线程数 == 1   (单线程)
  • 阻塞队列使用的是LinkedBlockingQueue
  • 适用于按照顺序执行的任务

3. newCachedThreadPool()

特点:

  • 核心线程数 == 0
  • 最大线程数 == Integer.MAX_VALUE
  • 阻塞队列为synchronousQueue
  • 适用于任务数比较密集,而且任务耗时比较短的情况(防止任务太多时,任务耗时太长,创建大量的线程占用内存)

4. newScheduledThreadPool

特点:创建一个可执行延时任务的线程池,支持定时及周期性任务执行

6.谈谈对ThreadLocal的理解

答:1.ThreadLocal可以实现资源对象的线程隔离,让每个线程各用各的资源对象,防止产生线程安全问题

       2.ThreadLocal也实现了线程内的资源共享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值