java面試題之多執行緒和併發庫

2021-08-18 21:39:16 字數 1789 閱讀 4766

1、多執行緒實現方式

(1)使用類thread

在thread子類覆蓋的run方法中編寫執行**

new thread()  

catch (interruptedexception e) }}

}.start();

(2)實現runnable介面

在傳遞給thread物件的runnable物件的run方法中編寫**

2 執行緒區域性變數threalocal

(1)threadlocal 的作用和目的:

threadlocal用於實現執行緒內的資料共享,即對於相同的程式**,多個模組在同乙個執行緒中執行時要共享乙份資料,而在另外乙個執行緒中執行時又共享另外乙份資料。

(3)threadlocal 的應用場景:

➢ 訂單處理包含一系列操作:減少庫存量、增加一條流水台賬、修改總賬,這幾個操作要在同乙個

事務中完成,通常也即同乙個執行緒中進行處理,如果累加公司應收款的操作失敗了,則應該把前面

的操作回滾,否則,提交所有操作,這要求這些操作使用相同的資料庫連線物件,而這些操作的**

分別位於不同的模組類中。

➢ 銀行轉賬包含一系列操作: 把轉出帳戶的餘額減少,把轉入帳戶的餘額增加,這兩個操作要在

同乙個事務中完成,它們必須使用相同的資料庫連線物件,轉入和轉出操作的**分別是兩個不同

的帳戶物件的方法。

➢ 例如 strut2 的 actioncontext,同一段**被不同的執行緒呼叫執行時,該**操作的資料是每

個執行緒各自的狀態和資料,對於不同的執行緒來說,getcontext 方法拿到的物件都不相同,對同乙個

執行緒來說,不管呼叫 getcontext 方法多少次和在哪個模組中 getcontext 方法,拿到的都是同一

個。(4)threadlocal的使用方式

①在關聯資料類中建立private static threadloacal

public class serialnum

};public static int get()

}②在util類中建立threadlocal

public class hibernateutil catch (throwable ex)

}//建立執行緒區域性變數 session,用來儲存 hibernate 的 session

public static final threadlocal session = new threadlocal();

/** * 獲取當前執行緒中的 session

* @return session

* @throws hibernateexception

*/public static session currentsession() throws hibernateexception

return s;

}public static void closesession() throws hibernateexception

③在runnable中建立threadlocal

a、在多執行緒的類(如 threaddemo 類)中,建立乙個 threadlocal 物件 thread***,用來儲存執行緒間需要隔離處理的物件 ***。

b、在 threaddemo 類中,建立乙個獲取要隔離訪問的資料的方法 get***(),在方法中判斷,若threadlocal 物件為 null 時候,應該 new()乙個隔離訪問型別的物件,並強制轉換為要應用的型別

c、在 threaddemo 類的 run()方法中,通過呼叫 get***()方法獲取要操作的資料,這樣可以保證每個執行緒對應乙個資料物件,在任何時刻都操作的是這個物件。

java多執行緒面試題

有三個執行緒id分別是a b c,請有多線程式設計實現,在螢幕上迴圈列印10次abcabc 由於執行緒執行的不確定性,要保證這樣有序的輸出,必須控制好多執行緒的同步。執行緒同步有兩種基本方法 1 synchronized 2 wait,notify,notifyall 現在分別採用這兩種方法來解答這...

Java多執行緒面試題

執行緒池的原理,為什麼要建立執行緒池?將預先建立好的執行緒放入執行緒池當中。當有執行緒請求時,則從執行緒池中呼叫執行緒,呼叫結束之後歸還執行緒。當出現需要建立大量執行緒的情況時,反覆的建立執行緒會造成大量的效能損耗。使用執行緒池能降低損耗,提高響應的速度,方便管理執行緒。執行緒的生命週期,什麼時候會...

java多執行緒面試題1

假設如下 中,若t1執行緒在t2執行緒啟動之前已經完成啟動。的輸出是 public static void main stringargs throws exception catch interruptedexception e t1.start thread.sleep 1000 we assu...