1.TimeUnit
Thread.sleep() 是一個(gè)靜態(tài)方法屋灌,暫停線程時(shí)它不會(huì)釋放鎖,該方法會(huì)拋出InterrupttedException異常(如果有線程中斷了當(dāng)前線程)晌柬,其可讀性很低,不能清楚的知道到底暫停了多久郭脂,對(duì)比兩者用法就會(huì)發(fā)現(xiàn) TineUnit表達(dá)的很清楚
TimeUnit.MINUTES.sleep(4); // sleeping for 4 minutes
Thread.sleep(4*60*1000);
2. CopyOnWriteArrayList
CopyOnWriteArrayList是jdk concurrent包中提供的一個(gè)非阻塞型的年碘,線程安全的List實(shí)現(xiàn)。
-
CopyOnWriteArrayList
在進(jìn)行數(shù)據(jù)修改時(shí)朱庆,都不會(huì)對(duì)數(shù)據(jù)進(jìn)行鎖定盛泡,每次修改時(shí),先拷貝整個(gè)數(shù)組娱颊,然后修改其中的一些元素傲诵,完成上述操作后,替換整個(gè)數(shù)組的指針箱硕。 - 對(duì)
CopyOnWriteArrayList
進(jìn)行讀取時(shí)拴竹,也不進(jìn)行數(shù)據(jù)鎖定,直接返回需要查詢的數(shù)據(jù)剧罩,如果需要返回整個(gè)數(shù)組栓拜,那么會(huì)將整個(gè)數(shù)組拷貝一份,再返回惠昔,保證內(nèi)部array在任何情況下都是只讀的幕与。
因?yàn)樯鲜鲎x寫(xiě)特性,如果需要頻繁對(duì)CopyOnWriteArrayList
進(jìn)行修改镇防,而很少讀取的話啦鸣,那么會(huì)嚴(yán)重降低系統(tǒng)性能。
因?yàn)闆](méi)有鎖的干預(yù)来氧,所以CopyOnWriteArrayLIst
在少量修改诫给,頻繁讀取的場(chǎng)景下香拉,有很好的并發(fā)性能。