一、线程池参数的执行顺序

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.丢弃最旧策略:丢弃队列中等待时间最长的任务,并执行当前提交的任务,可能造成数据丢失但会腾出空间执行新任务。

五、多态

定义

  • 多态:指为不同数据类型的实体提供统一的接口

实现方式

  • 类的继承(虚方法):子类可以重写父类的虚方法,以实现多态。
  • 抽象类:抽象类定义了子类必须实现的方法,子类可以通过实现这些方法来实现多态。
  • 接口:接口定义了方法的签名,但不提供实现。实现接口的类必须提供这些方法的具体实现,从而实现多态。

好处

  1. 可替换性:多态使得代码更易于维护和扩展,因为可以轻松地替换实现细节而不影响整体结构。
  2. 可扩充性:添加新的子类不会影响已存在的多态性。
  3. 接口性:多态提供了一个共同接口,使得子类可以轻松地实现或覆盖这些方法。
  4. 灵活性:提高了代码的灵活性和可重用性。
  5. 简化性:简化了对应用软件的代码编写和修改过程。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部