知了堂Java | Java基礎(chǔ)面試題(9)
28.ThreadLocal 是什么?有哪些使用場(chǎng)景??
線(xiàn)程局部變量是局限于線(xiàn)程內(nèi)部的變量,屬于線(xiàn)程自身所有,不在多個(gè)線(xiàn)程間共享。Java提供 ThreadLocal類(lèi)來(lái)支持線(xiàn)程局部變量,是一種實(shí)現(xiàn)線(xiàn)程安全的方式。但是在管理環(huán)境下(如 web 服務(wù) 器)使用線(xiàn)程局部變量的時(shí)候要特別小心,在這種情況下,工作線(xiàn)程的生命周期比任何應(yīng)用變量的生命 周期都要長(zhǎng)。任何線(xiàn)程局部變量一旦在工作完成后沒(méi)有釋放,Java 應(yīng)用就存在內(nèi)存泄露的風(fēng)險(xiǎn)
29.什么是 java 序列化?什么情況下需要序列化?
簡(jiǎn)單說(shuō)就是為了保存在內(nèi)存中的各種對(duì)象的狀態(tài)(也就是實(shí)例變量,不是方法),并且可以把保存的對(duì) 象狀態(tài)再讀出來(lái)。雖然你可以用你自己的各種各樣的方法來(lái)保存object states,但是Java給你提供一種 應(yīng)該比你自己好的保存對(duì)象狀態(tài)的機(jī)制,那就是序列化 什么情況下需要序列化:
(1)當(dāng)你想把的內(nèi)存中的對(duì)象狀態(tài)保存到一個(gè)文件中或者數(shù)據(jù)庫(kù)中時(shí)候;
(2)當(dāng)你想用套接字在網(wǎng)絡(luò)上傳送對(duì)象的時(shí)候;?
(3)當(dāng)你想通過(guò)RMI傳輸對(duì)象的時(shí)候;