什么是線程安全
當(dāng)多個(gè)線程在訪問(wèn)某一個(gè)類(對(duì)象或方法)時(shí)须肆,這個(gè)類都能表現(xiàn)出正確的行為,那么這個(gè)類就是線程安全的豌汇。
什么是對(duì)象鎖和類鎖
當(dāng)對(duì)象的方法使用synchronized修飾的時(shí)候,是對(duì)象鎖拒贱,不同的對(duì)象可以同時(shí)調(diào)用此方法
當(dāng)類的synchronized方法使用static是類鎖,同一時(shí)間只能被一個(gè)線程調(diào)用逻澳。
多線程的臟讀是如何產(chǎn)生的
當(dāng)一個(gè)對(duì)象的set方法未執(zhí)行完成時(shí),對(duì)象的get方法執(zhí)行斜做,讀到錯(cuò)誤的數(shù)據(jù)。解決方法是對(duì)get的set方法都加上synchronied修飾
synchronized擁有鎖重入的功能如何理解
當(dāng)一個(gè)線程得到對(duì)象的鎖之后瓤逼,再次請(qǐng)求此對(duì)象可以再次得到鎖。
如對(duì)象有兩個(gè)同步方法A,B霸旗,A調(diào)B也是可以的。
如果父類和子類的方法都實(shí)現(xiàn)了同步皿桑,子類也可以調(diào)用父類的方法。
notify和wait有何不同
notify用于喚醒線程诲侮,不釋放鎖
wait使線程進(jìn)入阻塞狀態(tài),釋放鎖
如何實(shí)現(xiàn)實(shí)時(shí)的通知
CountDownLatch
AtomicInteger
AtomicInteger沟绪,一個(gè)提供原子操作的Integer的類。在Java語(yǔ)言中绽慈,++i和i++操作并不是線程安全的,在使用的時(shí)候坝疼,不可避免的會(huì)用到synchronized關(guān)鍵字。而AtomicInteger則通過(guò)一種線程安全的加減操作接口钝凶。
ThreadLocal
BlockingQueue 都有哪些方法
header 1 | header 2 | 3 |
---|---|---|
add | 增加一個(gè)元索 | 如果隊(duì)列已滿,則拋出一個(gè)IIIegaISlabEepeplian異常 |
remove | 移除并返回隊(duì)列頭部的元素 | 如果隊(duì)列為空耕陷,則拋出一個(gè)NoSuchElementException異常 |
element | 返回隊(duì)列頭部的元素 | 如果隊(duì)列為空,則拋出一個(gè)NoSuchElementException異常 |
offer | 添加一個(gè)元素并返回true | 如果隊(duì)列已滿哟沫,則返回false |
poll | 移除并返問(wèn)隊(duì)列頭部的元素 | 如果隊(duì)列為空,則返回null |
peek | 返回隊(duì)列頭部的元素 | 如果隊(duì)列為空嗜诀,則返回null |
put | 添加一個(gè)元素 | 如果隊(duì)列滿,則阻塞 |
take | 移除并返回隊(duì)列頭部的元素 | 如果隊(duì)列為空裹虫,則阻塞 |
remove亿蒸、element一铅、offer 、poll、peek 其實(shí)是屬于Queue接口拇涤。