當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是否操作完成 .
新聞熱點
疑難解答