隊(duì)列是一種非常常用的數(shù)據(jù)結(jié)構(gòu),一進(jìn)一出,先進(jìn)先出。 

  在Java并發(fā)包中提供了兩種類型的隊(duì)列,非阻塞隊(duì)列與阻塞隊(duì)列,當(dāng)然它們都是線程安全的,無(wú)需擔(dān)心在多線程并發(fā)環(huán)境所帶來(lái)的不可預(yù)知的問題。為什么會(huì)有非阻塞和阻塞之分呢?這里的非阻塞與阻塞在于有界與否,也就是在初始化時(shí)有沒有給它一個(gè)默認(rèn)的容量大小,對(duì)于阻塞有界隊(duì)列來(lái)講,如果隊(duì)列滿了的話,則任何線程都會(huì)阻塞不能進(jìn)行入隊(duì)操作,反之隊(duì)列為空的話,則任何線程都不能進(jìn)行出隊(duì)操作。而對(duì)于非阻塞無(wú)界隊(duì)列來(lái)講則不會(huì)出現(xiàn)隊(duì)列滿或者隊(duì)列空的情況。它們倆都保證線程的安全,即不能有一個(gè)以上的線程同時(shí)對(duì)隊(duì)列進(jìn)行入隊(duì)或者出隊(duì)操作。 

  非阻塞隊(duì)列:ConcurrentLinkedQueue 

  阻塞隊(duì)列:ArrayBlockingQueue、LinkedBlockingQueue、…… 

網(wǎng)友評(píng)論