阻塞:当某个事件或者任务在执行过程中,它发出一个请求操作,但是由于该请求操作需要的条件不满足,那么就会一直在那等待,直至条件满足;
非阻塞:当某个事件或者任务在执行过程中,它发出一个请求操作,如果该请求操作需要的条件不满足,会立即返回一个标志信息告知条件不满足,不会一直在那等待。
这就是阻塞和非阻塞的区别。也就是说阻塞和非阻塞的区别关键在于当发出请求一个操作时,如果条件不满足,是会一直等待还是返回一个标志信息。
举个简单的例子:假如我要读取一个文件中的内容,如果此时文件中没有内容可读,对于阻塞来说就是会一直在那等待,直至文件中有内容可读;而对于非阻塞来说,就会直接返回一个标志信息告知文件中暂时无内容可读。
在网上有一些朋友将同步和异步分别与阻塞和非阻塞画上等号,事实上,它们是两组完全不同的概念。注意,理解这两组概念的区别对于后面IO模型的理解非常重要。
同步和异步着重点在于多个任务的执行过程中,一个任务的执行是否会导致整个流程的暂时等待;
而阻塞和非阻塞着重点在于发出一个请求操作时,如果进行操作的条件不满足是否会返会一个标志信息告知条件不满足。
相关推荐
Java NIO,全称Non-Blocking Input/Output,是非阻塞式输入输出,它是Java从1.4版本开始引入的一种新的I/O模型,为Java程序员提供了处理I/O操作的新方式。NIO的主要特点是其能够使Java程序以更有效的方式处理I/O流,...
在AIO中,读写操作是非阻塞的,并且操作系统会在数据准备好时主动通知应用程序,从而减少了程序对系统状态的轮询。这样,服务器可以专注于处理业务逻辑,而不必关心I/O操作的细节,提升了整体性能。 **文件名称列表...
NIO的核心特点是非阻塞,它允许应用程序以更有效的方式处理输入/输出操作,特别是在高并发的网络通信场景中。本示例通过两个类——EchoServer和EchoClient,展示了如何使用NIO实现基于TCP/IP协议的网络通信。 首先...
为了解决这些问题,在JDK 1.4中引入了一个全新的输入/输出库——NIO(New Input/Output),它提供了高速、面向块的I/O操作,极大地提高了网络编程的效率。 #### 二、NIO核心概念介绍 NIO的核心概念包括缓冲区...
与传统I/O不同的是,Channel支持双向读写操作,并且是非阻塞的。 2. **Selector(选择器)**:负责监控多个Channel的状态变化。当Channel中的某些操作准备就绪时(例如可读、可写等),Selector会通知应用程序,...
有NIO,自然有IO,大白话就是一个是非阻塞IO,一个是阻塞IO。 早期时候的网络编程是阻塞IO模式,IO就是输入输出,举个例子:你打字就是键盘的输入,输入你要打的东西。阻塞就是类似塞车,总是得卡在半路上,等着前面...
10. 异步处理:对于耗时的文件操作,如大文件读写、复制等,建议使用`AsyncTask`、`Handler`、`IntentService`或`JobScheduler`进行异步处理,以避免阻塞主线程。 11. 文件操作的异常处理:在执行文件操作时,可能...
而"HttpServer"文件可能是一个更复杂的实现,可能采用了高级的并发控制机制,比如Java的`ExecutorService`和`ThreadPoolExecutor`,或者是非阻塞I/O模型如NIO(非阻塞输入/输出)。 学习这些示例可以帮助你理解HTTP...
这种模型下,读写操作是非阻塞的,通过使用Selector和Channel等组件实现了更高效的资源管理。 ##### 流式部分 Java IO的核心是流(Stream)的概念。流可以被划分为以下几类: - **字节流**:处理二进制数据,例如`...
`java.nio`是非阻塞I/O,提供了一种更高效的数据传输方式。 2. **集合框架**:在1.6.0中,Java集合框架已经相当完善,包括`List`、`Set`、`Map`接口及其实现类,如`ArrayList`、`HashSet`、`HashMap`。这个版本引入...
- **Collections.sort**:对于`List`的排序,`Collections.sort()` 方法内部实际上是基于归并排序的一个变种——TimSort。这种排序算法首先会检查列表是否已经部分有序,如果是,则直接利用这种有序性进行排序,这...