For me below are the most probable definitions for asynchronous and non-blocking I/O:
After knowing these definitions if we analyze java channels i.e.
I thought of answering my question by doing some more homework. This post will also help in understanding the I/O concepts w.r.t. underlying OS.
This is blocking I/O:
FileOutputStream and even reading to or writing from Socket come under this category
This is non-blocking I/O: this is used by Socket Channels like
DatagramChannel in Java
Selectorto handle multiple channels and these channels should be
non-blockingby nature. So Socket channels can be registered to
Selectorcan manage by I/O multiplexing facility of underlaying OS.
For these above functionalities java uses underlying OS heavily. This is evident when i was going through the book . Here in chapter 4 the author mentions that
True readiness selection must be done by the operating system. One of the most important functions performed by an operating system is to handle I/O requests and notify processes when their data is ready. So it only makes sense to delegate this function down to the operating system. The Selector class provides the abstraction by which Java code can request readiness selection service from the underlying operating system in a portable way.
Hence it's clear that Java uses underlying OS heavily for these features.