Java基础知识面试题每日三道 追梦:第七天

84 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Java中的NIO,BIO,AIO分别是什么?

NIO

同步非阻塞,服务器实现模式为一个请求一个线程,即客服端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如连天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。

BIO

同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的请求开销,当然可以通过线程池机制改善。BIO方式适用于连接于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。

AIO

异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了在通知服务器应用区启动线程进行处理,AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,变成比较负责,JDK7开始支持。

线程同步于阻塞的关系?同步一定阻塞吗?阻塞一定同步吗?

同步是个过程,阻塞是线程的一种状态。

多个线程操作共享变量时可能会出现竞争,这时需要同步来防止两个以上的线程同时进入临界区,在这个过程中,后进入临界区的线程将阻塞,等待先入的线程走出临界区。

线程同步不一定发生阻塞。线程同步的时候,需要协调推进速度,互相等待和互相唤醒会发生阻塞。

阻塞不一定同步

同步和异步的区别?

同步交互: ☞发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待的过程。

异步交互: ☞发送一个请求,不需要等待返回,随时可以在发送下一个请求,即不需要等待。

区别: 一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要的等待异步交互方式。

今日的三道题结束啦。 祝你每日进步加油。

3B35145FEB3981BA94359BA1B8D08EB8.jpg