一、线程池参数的执行顺序
1.如果线程池中的线程数量小于核心线程数,则创建新的线程来处理任务
2.如果线程池中的线程数量等于核心线程数,但工作队列未满,将任务放入工作队列中执行
3.如果工作队列已满,但线程数小于最大线程数,则创建新的线程来处理任务
4.如果线程数已达到最大线程数,且工作队列已满,则使用拒绝策略来处理该任务
二、多线程中继承Thread 类和实现Runnable 接口的区别
1.实现Runnable接口是代理模式,交给Thread()类去start;一个类继承Thread类后本身就是一个线程对象,可以直接start
2.实现Runnable接口可以在创建线程时Thread类的构造器设置线程名;继承Thread类可以super()调用父类构造器起名
3.由于java是单继承,一个类继承thread类后不能继承其他类,而实现runnable接口侧面实现多继承
4.继承thread类不能实现线程变量资源共享;实现runnable接口线程变量可以共享也可以不共享,看线程创建方式
三、redis集群相比哨兵模式的优缺点
1.数据分片:集群模式通过数据分片提高了系统的扩展性和性能,而哨兵模式没有数据分片功能,适合数据量较小的场景;
2.高可用性:哨兵模式主要提供高可用性,能够在主节点故障时迅速进行故障转移。集群模式也提供高可用性,但是它通过分片和多个副本来实现,比哨兵模式复杂;
3.写能力:集群模式由于数据分片,可以在多个节点上进行写操作,提高了写能力。哨兵模式的写能力受限于单个主节点。
四、线程池的拒绝策略
当线程池无法处理新任务时,会触发拒绝策略。
1.中止策略:直接抛出异常,这是默认策略,可以明确地感知到任务被拒绝;
2.调用者运行策略:直接在调用execute方法线程中运行被拒绝的任务。不会造成数据丢失,但可能会降低调用线程的功能;
3.丢弃策略:不处理也不抛出异常,直接丢弃任务。可能造成数据丢失,且调用者无法感知到任务被拒绝;
4.丢弃最旧策略:丢弃队列中等待时间最长的任务,并执行当前提交的任务,可能造成数据丢失但会腾出空间执行新任务。
五、多态
定义
- 多态:指为不同数据类型的实体提供统一的接口
实现方式
- 类的继承(虚方法):子类可以重写父类的虚方法,以实现多态。
- 抽象类:抽象类定义了子类必须实现的方法,子类可以通过实现这些方法来实现多态。
- 接口:接口定义了方法的签名,但不提供实现。实现接口的类必须提供这些方法的具体实现,从而实现多态。
好处
- 可替换性:多态使得代码更易于维护和扩展,因为可以轻松地替换实现细节而不影响整体结构。
- 可扩充性:添加新的子类不会影响已存在的多态性。
- 接口性:多态提供了一个共同接口,使得子类可以轻松地实现或覆盖这些方法。
- 灵活性:提高了代码的灵活性和可重用性。
- 简化性:简化了对应用软件的代码编写和修改过程。
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 面试高频问题----5
发表评论 取消回复