当AtomicInteger进行++i操作, for循环中一直进行compareAndSet操作, 多线程情况下进行++i, 并没有锁的概念, 没有等待, 而是查看预期值和当前值是否相同如果不同就直接返回false, 返回false之后, 程序还会一直执行compareAndSet操作, 直到返回true. 所以这里并没有阻塞情况出现.异步阻塞 IO : 此种方式下是指应用发起一个 IO 操作以后,不等待内核 IO 操作的完成,等内核完成 IO 操作以后会通知应用程序,这其实就是同步和异步最关键的区别,同步必须等待或者主动的去询问 IO 是否完成,那么为什么说是阻塞的呢?因为此时是通过 select 系统调用来完成的,而 select 函数本身的实现方式是阻塞的,而采用 select 函数有个好处就是它可以同时监听多个文件句柄,从而提高系统的并发性!
异步非阻塞 IO(通知立即返回): 在此种模式下,用户进程只需要发起一个 IO 操作然后立即返回,等 IO 操作真正的完成以后,应用程序会得到 IO 操作完成的通知,此时用户进程只需要对数据进行处理就好了,不需要进行实际的 IO 读写操作,因为 真正的 IO读取或者写入操作已经由 内核完成了。目前 Java 中还没有支持此种 IO 模型。
java的NIO属于同步非阻塞IO, 应用进行IO操作会立即返回标示, 然后应用会一直轮训询问IO是否操作完成 .
新闻热点
疑难解答