博客說明面試
文章所涉及的資料來自互聯網整理和我的總結,意在於我的學習和經驗彙總,若有什麼地方侵權,請聯繫本人刪除,謝謝!
會話(Session)Bean、實體(Entity)Bean 、消息驅動的(Message Driven)Beanredis
會話Bean又可分爲有狀態(Stateful)和無狀態(Stateless)兩種數據庫
實體Bean可分爲Bean管理的持續性(BMP)和容器管理的持續性(CMP)兩種。安全
鎖機制的做用是保證共享資源能夠進行排他性的訪問網絡
悲觀鎖悲觀的認爲在數據處理過程當中極有可能存在修改數據的併發事務(包括本系統的其餘事務或來自外部系統的事務),因而將處理的數據設置爲鎖定狀態。多線程
數據庫中主要是經過數據庫底層的鎖機制才能保證真正的數據訪問排他性。併發
缺點:併發量不高,效率低;less
樂觀鎖對併發事務持樂觀態度(認爲對數據的併發操做不會常常性的發生),經過更加寬鬆的鎖機制來解決因爲悲觀鎖排他性的數據訪問對系統性能形成的嚴重影響。最多見的樂觀鎖是經過數據版本標識來實現的異步
多線程不必定比單線程效率高,多線程的本質就是CPU經過輪換時間片執行不一樣的線程,看似多個線程一塊兒執行,可是卻承擔線程上下文切換的代價。函數
而對於Redis這樣的內存數據庫來講,沒有上下文的切換的單線程效率是最高的。Redis用單個CPU綁定一塊內存的數據,而後針對這塊內存的數據進行屢次讀寫操做都是在一個CPU上完成的。
(1)繼承Thread類,重寫run函數
(2)實現Runnable接口,重寫run函數
開啓線程:Thread t = new Thread(對象) //建立線程對象
t.start()
(3)實現Callable接口,重寫call函數
Callable是相似於Runnable的接口,實現Callable接口的類和實現Runnable的類都是可被其它線程執行的任務。
①Callable規定的方法是call(),而Runnable規定的方法是run()
②Callable的任務執行後可返回值,而Runnable的任務是不能返回值的
③call()方法可拋出異常,而run()方法是不能拋出異常的。
④運行Callable任務可拿到一個Future對象,Future表示異步計算的結果。它提供了檢查計算是否完成的方法,以等待計算的完成,並檢索計算的結果.經過Future對象可瞭解任務執行狀況,可取消任務的執行,還可獲取任務執行的結果
在操做系統中,線程是不擁有資源的,進程是擁有資源的。而線程是由進程建立的,一個進程能夠建立多個線程,這些線程共享着進程中的資源。因此,當線程一塊兒併發運行時,同時對一個數據進行修改,就可能會形成數據的不一致性
加鎖。
不共享狀態
可使用final修飾的對象保證線程安全,因爲final修飾的引用型變量(除String外)不可變是指引用不可變,但其指向的對象是可變的,因此此類必須安全發佈,也即不能對外提供能夠修改final對象的接口。
Java內存模型分爲主內存,和工做內存。主內存是全部的線程所共享的,工做內存是每一個線程本身有一個,不是共享的。
每條線程還有本身的工做內存,線程的工做內存中保存了被該線程使用到的變量的主內存副本拷貝。線程對變量的全部操做(讀取、賦值),都必須在工做內存中進行,而不能直接讀寫主內存中的變量。不一樣線程之間也沒法直接訪問對方工做內存中的變量,線程間變量值的傳遞均須要經過主內存來完成
感謝
牛客網萬能的網絡
以及勤勞的本身