JavaSE基础面试题 (24年7月11日)持续更新中。。。

1、线程池是什么?

        在Java中,线程池是一种用于管理和复用线程的机制,它可以有效地管理大量的任务执行。Java提供了 java.util.concurrent 包,其中包含了用于创建和管理线程池的类和接口。

        Java中最常用的线程池实现是 ThreadPoolExecutor 类。ThreadPoolExecutor 提供了灵活的线程池管理功能,可以通过配置不同的参数来适应不同的任务执行需求。它的构造方法允许你指定以下参数:

  • 核心线程数:线程池中保持的最小线程数。即使线程处于空闲状态,也会保留这些线程。如果线程池中的线程数少于核心线程数,并且有新的任务到达,会创建新的线程来处理任务,即使有空闲线程也是如此。

  • 最大线程数:线程池允许的最大线程数。当线程池中的线程数超过核心线程数且任务队列已满时,线程池会创建新的线程,直到达到最大线程数为止。

  • 线程存活时间:当线程池中的线程数超过核心线程数时,多余的空闲线程在结束前等待新任务的时间。

  • 任务队列:用于保存等待执行的任务的队列。可以选择不同类型的队列,例如有界队列或无界队列,以及同步队列等。

  • 拒绝策略:当任务无法被线程池执行时的处理策略。例如,可以选择抛出异常、丢弃任务、或直接执行任务等。

        除了直接使用 ThreadPoolExecutor 类外,Java还提供了 Executors 工厂类来创建常见类型的线程池:

  • newFixedThreadPool(int nThreads):创建一个固定大小的线程池,核心线程数和最大线程数都为 nThreads,使用无界队列。

  • newCachedThreadPool():创建一个可缓存的线程池,线程池的大小可根据需求自动调整,没有核心线程,最大线程数为 Integer.MAX_VALUE,使用 SynchronousQueue 作为任务队列。

  • newSingleThreadExecutor():创建一个单线程的线程池,只有一个工作线程在执行任务,保证任务按照指定顺序(FIFO、LIFO、优先级)执行。

        使用线程池的好处:

  1. 减少线程创建和销毁的开销:重复利用线程可以减少创建和销毁线程的开销,提高系统资源利用率。

  2. 控制并发资源:通过限制并发线程数量,可以有效地控制系统资源的使用,避免资源耗尽和性能下降。

  3. 提高响应速度:可以通过合理配置线程池参数,提高任务的响应速度,特别是在处理大量任务时。

2、线程生命周期

        当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要经过新建、就 绪、运行、阻塞和死亡5 种状态。尤其是当线程启动以后,它不可能一直占着 CPU 独自运 行,所以 CPU 需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞之间切换。

3、java反射的作用?

        反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意个对象,都能够调用它的任意一个方法。在java 中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。

4、sleep()和wait() 有什么区别?

        1. 对于 sleep()方法,我们首先要知道该方法是属于 Thread 类中的。而 wait()方法,则是属于 Object 类中的。

        2. sleep()方法导致了程序暂停执行指定的时间,让出 cpu 该其他线程,但是他的监控状态依然 保持者,当指定的时间到了又会自动恢复运行状态
         3. 在调用 sleep()方法的过程中, 线程不会释放对象锁。

         4. 而当调用 wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此 对象调用 notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。

5、什么是线程安全?

        线程安全指的是在多线程环境下,对共享数据进行读取和修改操作时,不会出现不可预期的结果或者数据不一致的情况。具体来说,线程安全可以保证以下几点:

  • 单个操作或者一系列操作要么全部执行完毕,要么完全不执行,不存在部分执行的情况。
  • 当一个线程修改了共享变量的值后,其他线程能够立即看到最新的修改值。
  • 程序的执行顺序与预期的顺序一致,不会因为编译器优化、指令重排序等导致执行顺序混乱。

6、IO流的概念

        IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在Java中把不同的输入/ 输出源抽象表述为"流"。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。 即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更 直观的进行数据操作。

7、什么是泛型?

        泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。比如我们要写一个排序方法,能够对整型数 组、字符串数组甚至其他任何类型的数组进行排序,我们就可以使用 Java 泛型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值