阻塞与非阻塞
Java?BIO的各種流是阻塞的。這意味著,當(dāng)一個(gè)線(xiàn)程調(diào)用?read()或?write()時(shí),該線(xiàn)程被阻塞,直到有一些數(shù)據(jù)被讀取,或數(shù)據(jù)完全寫(xiě)入。該線(xiàn)程在此期間不能再干任何事情了。?Java?NIO的非阻塞模式,使一個(gè)線(xiàn)程從某通道發(fā)送請(qǐng)求讀取數(shù)據(jù),但是它僅能得到目前可用的數(shù)據(jù),如果目前沒(méi)有數(shù)據(jù)可用時(shí),就什么都不會(huì)獲取。而不是保持線(xiàn)程阻塞,所以直至數(shù)據(jù)變的可以讀取之前,該線(xiàn)程可以繼續(xù)做其他的事情。非阻塞寫(xiě)也是如此。一個(gè)線(xiàn)程請(qǐng)求寫(xiě)入一些數(shù)據(jù)到某通道,但不需要等待它完全寫(xiě)入,這個(gè)線(xiàn)程同時(shí)可以去做別的事情。線(xiàn)程通常將非阻塞?IO的空閑時(shí)間用于在其它通道上執(zhí)行IO操作,所以一個(gè)單獨(dú)的線(xiàn)程現(xiàn)在可以管理多個(gè)輸入和輸出通道(channel)。
?
總結(jié)