java经典面试题集锦(四)

  • 来源:网络
  • 更新日期:2020-07-09

摘要:一、反射机制的应用场景(相关教程推荐:java面试题)逆向代码 ,例如反编译与注解相结合的框架 例如Retrofit单纯的反射机制应用框架 例如EventBus 2.x动态生成类框架 例如Gson二、

一、反射机制的应用场景

(相关教程推荐:java面试题)

逆向代码 ,例如反编译

与注解相结合的框架 例如Retrofit

单纯的反射机制应用框架 例如EventBus 2.x

动态生成类框架 例如Gson

二、什么是多线程?

多线程,是指从软件或者硬件上实现多个线程并发执行的技术。 在一个程序中,这些独立运行的程序片段叫作“线程”,利用它编程的概念就叫作“多线程处理”。

具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。

主线程就是创建进程中产生的第一个线程,也就是main函数对应的线程。

(推荐学习:java入门程序)

三、说一下多线程的好处?

1、多线程的优点

创建一个新线程的代价要比创建一个新进程小的多

线程之间的切换相较于进程之间的切换需要操作系统做的工作很少

线程占用的资源要比进程少很多

能充分利用多处理器的可并行数量

等待慢速 IO操作结束以后,程序可以执行其他的计算任务

计算(CPU)密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现

IO密集型应用,为了提高性能,将IO操作重叠,线程可以等待不同的IO操作。

2、多线程的缺点

性能损失( 一个计算密集型线程是很少被外部事件阻塞的,无法和其他线程共享同一个处理器,当计算密集型的线程的数量比可用的处理器多,那么就有可能有很大的性能损失,这里的性能损失是指增加了额外的同步和调度开销,二可用资源不变。)

健壮性降低(线程之间是缺乏保护性的。在一个多线程程序里,因为时间上分配的细微差距或者是共享了一些不应该共享的变量而造成不良影响的可能影响是很大的。)

缺乏访问控制( 因为进程是访问控制的基本粒度,在一个线程中调用某些OS函数会对整个进程造成影响 。)

编程难度提高(编写和 调试一个多线程程序比单线程困难的多。)

四、线程和进程有什么区别?

1、调度

进程是操作系统分配资源的一个基本单位。线程是 CPU调度的基本单位。

2、并发性

引入线程之后,不仅进程之间是可以并发执行的,而且在一个进程之中的多个线程也是 可以并发执行的,甚至是允许一个进程中 的全部进程并发执行。

同样,不同的进程中的线程也是可以并发执行的。使得OS有 更好的并发性,提高了资源的利用率和系统吞吐量。

3、拥有资源

进程可以拥有资源,并且是系统拥有资源的基本单位 。线程本身并不拥有系统资源,仅有一些能保证独立运行 的资源,这块资源的各个线程私有的。

例如,线程ID、一组寄存器、栈、errno、信号屏蔽字(一个进程中pending信号只有一个,但是任意一个线程都可以处理这个信号)、调度优先级。

4、独立性

在同一进程中线程的独立性要比在不同的进程中独立性要低很多 。

5、系统开销

线程切换的开销低于进程切换的开销,

6、支持多处理机系统

对于传统的进程,也就是单线程进程 ,不管有多少个处理机,进程只能运行在同一个 处理机上面,但对于多线程进程,就可以将一个进程中的多个线程分配到多个处理机上面,使其并发执行,加速了进程的完成。

(视频教程推荐:java视频教程)

五、进程和线程的应用场景

需要频繁创建销毁优先使用线程。

需要大量计算的优先使用线程。

相关性较强的使用线程,相关性较弱使用进程。

可能要扩展到多机分布使用进程,多核分布使用线程。