日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

java 同步块 抛出异常_java问题合集(一)

發(fā)布時間:2024/10/14 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 同步块 抛出异常_java问题合集(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

垃圾回收算法

引用計數(shù)法,標(biāo)記清除法,標(biāo)記壓縮清除法(Java中老年代采用),復(fù)制算法(Java中新生代采用),分代法(Java堆采用),分區(qū)算法。

重要的三句話:

垃圾回收器只知道釋放那些經(jīng)由new分配的內(nèi)存。

1.對象可能不被垃圾回收;

2.垃圾回收并不等于”析構(gòu)”;

3.垃圾回收只能與內(nèi)存有關(guān)。其他補充

棧:后進(jìn)先出

隊列:先進(jìn)先出

前:中左右? ? ? ? 中:左中右? ? ? 后:左右中

創(chuàng)建執(zhí)行線程的方式:

1.繼承Thread類

2.實現(xiàn)Runnable接口

3.實現(xiàn)Callable接口

4.線程池

2/3的區(qū)別:想較于實現(xiàn)Runnable接口的方式,Callable帶泛型,這個方法可以有返回值(返回值類型就是泛型指定的),并且可以拋出異常。

執(zhí)行Callable方式,需要FutureTask實現(xiàn)類的支持,用于接收運算結(jié)果,FutureTask是Future接口的實現(xiàn)類

類和對象:

類是對象具有共同特征和行為的對象的抽象1、String和StringBuffer的區(qū)別?

簡單地說,就是一個變量和常量的關(guān)系。StringBuffer對象的內(nèi)容可以修改;而String對象一旦產(chǎn)生后就不可以被修改,重新賦值其實是兩個對象。

StringBuffer的內(nèi)部實現(xiàn)方式和String不同,StringBuffer在進(jìn)行字符串處理時,不生成新的對象,在內(nèi)存使用上要優(yōu)于String類。

StringBuffer是線程安全的,在多線程程序中也可以很方便的進(jìn)行使用,但是程序的執(zhí)行效率相對來說就要稍微慢一些。

StringBuffer類中的方法要偏重于對字符串的變化例如追加、插入和刪除等,這個也是StringBuffer和String類的主要區(qū)別。2、HashMap和Hashtable的區(qū)別?

HashMap和Hashtable都實現(xiàn)了Map接口,因此很多特性非常相似。但是,他們有以下不同點:

補充:HashMap是線程不安全的,Hashtable是線程安全的;Hashtable效率低,因為——Hashtable和HashMap底層都是Hash表,Hashtable有鎖,并且他的鎖是鎖整個表,(并行轉(zhuǎn)換成了串行);當(dāng)多個線程并發(fā)去訪問這個Hashtable時,一次只有一個進(jìn)入。當(dāng)一個結(jié)束了才開啟下一個。效率低。

①、HashMap允許鍵和值是null,而Hashtable不允許鍵或者值是null。

②、Hashtable是同步(synchronization)的,而HashMap不是(這意味著Hashtable是線程安全的,多個線程可以共享一個Hashtable;而如果沒有正確的同步的話,多個線程是不能共享HashMap的;Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的擴展性更好。)。因此,HashMap更適合于單線程環(huán)境,而Hashtable適合于多線程環(huán)境。

③、另一個區(qū)別是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以當(dāng)有其它線程改變了HashMap的結(jié)構(gòu)(增加或者移除元素),將會拋出ConcurrentModificationException,但迭代器本身的remove()方法移除元素則不會拋出ConcurrentModificationException異常。但這并不是一個一定發(fā)生的行為,要看JVM。這條同樣也是Enumeration和Iterator的區(qū)別。

HashMap可以通過下面的語句進(jìn)行同步:Map m = Collections.synchronizeMap(hashMap);3、同步和異步有何異同,在什么情況下分別使用他們?舉例說明。

Java中交互方式分為同步和異步兩種:

同步交互:指發(fā)送一個請求,需要等待返回,然后才能夠發(fā)送下一個請求,有個等待過程;

異步交互:指發(fā)送一個請求,不需要等待返回,隨時可以再發(fā)送下一個請求,即不需要等待。

區(qū)別:一個需要等待,一個不需要等待,在部分情況下,我們的項目開發(fā)中都會優(yōu)先選擇不需要等待的異步交互方式。

哪些情況建議使用同步交互呢?比如銀行的轉(zhuǎn)賬系統(tǒng),對數(shù)據(jù)庫的保存操作等等,都會使用同步交互操作,其余情況都優(yōu)先使用異步交互。

(如果數(shù)據(jù)將在線程間共享。例如正在寫的數(shù)據(jù)以后可能被另一個線程讀到,或者正在讀的數(shù)據(jù)可能已經(jīng)被另一個線程寫過了,那么這些數(shù)據(jù)就是共享數(shù)據(jù),必須進(jìn)行同步存取。

當(dāng)應(yīng)用程序在對象上調(diào)用了一個需要花費很長時間來執(zhí)行的方法,并且不希望讓程序等待方法的返回時,就應(yīng)該使用異步編程,在很多情況下采用異步途徑往往更有效率。)4、接口是否可繼承接口?抽象類是否可實現(xiàn)(implements)接口?抽象類是否可繼承實體類(concrete class)?

接口可以繼承接口。

抽象類可以實現(xiàn)(implements)接口。

抽象類是否可繼承實體類,但前提是實體類必須有明確的構(gòu)造函數(shù)。5、abstract class(抽象類)和interface(接口)有什么區(qū)別?詳細(xì)

1.相同點

A. 兩者都是抽象類,都不能實例化。

B. interface實現(xiàn)類及abstrct class的子類都必須要實現(xiàn)已經(jīng)聲明的抽象方法。

2. 不同點

A. interface需要實現(xiàn),要用implements,而abstract class需要繼承,要用extends。

B. 一個類可以實現(xiàn)多個interface,但一個類只能繼承一個abstract class。

C. interface強調(diào)特定功能的實現(xiàn),而abstract class強調(diào)所屬關(guān)系。

D. 盡管interface實現(xiàn)類及abstrct class的子類都必須要實現(xiàn)相應(yīng)的抽象方法,但實現(xiàn)的形式不同。interface中的每一個方法都是抽象方法,都只是聲明的(declaration, 沒有方法體),實現(xiàn)類必須要實現(xiàn)。而abstract class的子類可以有選擇地實現(xiàn)。6、構(gòu)造器Constructor是否可被override?

java 重寫/覆蓋(Override)與重載(Overload)

構(gòu)造器不是方法,那么用來修飾方法特性的所有修飾符都不能用來修飾構(gòu)造器(并不等于構(gòu)造器不具備這些特性,雖然不能用static修飾構(gòu)造器,但它卻有靜態(tài)特性)構(gòu)造器只能用public private protected這三個權(quán)限修飾符,且不能有返回語句。7、編程題: 寫一個Singleton出來。

單例模式(Singleton):保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。

餓漢式/懶漢式

上面第二種寫法存在的線程安全問題的解決方法8、數(shù)組有沒有l(wèi)ength()這個方法? String有沒有l(wèi)ength()這個方法?

1、數(shù)組有沒有l(wèi)ength()這個方法? String有沒有l(wèi)ength()這個方法?

數(shù)組沒有l(wèi)ength()這個方法,有l(wèi)ength的屬性。String有有l(wèi)ength()這個方法。

2、是否可以繼承String類?

String類是final類故不可以繼承。

sleep是線程類(Thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時間,給執(zhí)行機會給其他線程,但是監(jiān)控狀態(tài)依然保持,到時后會自動恢復(fù)。調(diào)用sleep不會釋放對象鎖。

wait是Object類的方法,對此對象調(diào)用wait方法導(dǎo)致本線程放棄對象鎖,進(jìn)入等待此對象的等待鎖定池,只有針對此對象發(fā)出notify方法(或notifyAll)后本線程才進(jìn)入對象鎖定池準(zhǔn)備獲得對象鎖進(jìn)入運行狀態(tài)。10、java語言如何進(jìn)行異常處理,關(guān)鍵字:throws,throw,try,catch,finally分別代表什么意義?在try塊中可以拋出異常嗎?

throws是獲取異常(用于在方法簽名中聲明拋出一個或多個異常類,throws關(guān)鍵字后可以緊跟一個或多個異常類。)

throw是拋出異常(用于手動地拋出異常對象。throw后面需要一個異常對象。)

try是將會發(fā)生異常的語句括起來,從而進(jìn)行異常的處理,

catch是如果有異常就會執(zhí)行他里面的語句,(catch塊表示一個異常捕獲塊。當(dāng)程序執(zhí)行try塊引發(fā)異常時,這個異常對象將會被后面相應(yīng)的catch塊捕獲。)

而finally不論是否有異常都會進(jìn)行執(zhí)行的語句。

對于一個完整的異常處理流程而言,try塊是必須的,try塊后可以緊跟一個或多個catch塊,最后還可以帶一個finally塊。

try塊中可以拋出異常。11、多線程有幾種實現(xiàn)方法,都是什么?同步有幾種實現(xiàn)方法,都是什么?

一、多線程實現(xiàn)方法有兩種 :

①種是實現(xiàn)Runnable 接口  ②種是繼承Thread類。

二、實現(xiàn)同步也有兩種 :

①種是用同步方法,②種是用同步塊。

同步方法就是在方法返回類型后面加上synchronized, 比如:

public void * synchronized add(){...}。

同步塊就是直接寫:synchronized (這里寫需要同步的對象){...}

三、

wait():使一個線程處于等待狀態(tài),并且釋放所持有的對象的lock。

sleep():使一個正在運行的線程處于睡眠狀態(tài),是一個靜態(tài)方法, * 調(diào)用此方法要捕捉InterruptedException異常 * 。

notify():喚醒一個處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時候,并不能確切的喚醒某一個等待狀態(tài)的線程 ,而是由JVM確定喚醒哪個線程,而且不是按優(yōu)先級? 。

Allnotity():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。12、構(gòu)造一個鏈表類,用堆棧類實現(xiàn)

13、final,finally,finalize的差別

final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

finally是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行。

finalize是Object類的一個方法,在垃圾收集器執(zhí)行的時候會調(diào)用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關(guān)閉文件等。14、Java異常處理機制

在 Java 應(yīng)用程序中,異常處理機制為:拋出異常,捕捉異常。

拋出異常:當(dāng)一個方法出現(xiàn)錯誤引發(fā)異常時,方法創(chuàng)建異常對象并交付運行時系統(tǒng),異常對象中包含了異常類型和異常出現(xiàn)時的程序狀態(tài)等異常信息。運行時系統(tǒng)負(fù)責(zé)尋找處置異常的代碼并執(zhí)行。

捕獲異常:在方法拋出異常之后,運行時系統(tǒng)將轉(zhuǎn)為尋找合適的異常處理器(exception handler)。潛在的異常處理器是異常發(fā)生時依次存留在調(diào)用棧中的方法的集合。當(dāng)異常處理器所能處理的異常類型與方法拋出的異常類型相符時,即為合適 的異常處理器。運行時系統(tǒng)從發(fā)生異常的方法開始,依次回查調(diào)用棧中的方法,直至找到含有合適異常處理器的方法并執(zhí)行。當(dāng)運行時系統(tǒng)遍歷調(diào)用棧而未找到合適 的異常處理器,則運行時系統(tǒng)終止。同時,意味著Java程序的終止。15、給定一個序列,取出其中第二大的數(shù),要求不對整個序列排序

16、字符串壓縮

總結(jié)

以上是生活随笔為你收集整理的java 同步块 抛出异常_java问题合集(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。