4 執行緒範圍內的資料共享之ThreadLocal

2022-03-16 10:57:28 字數 2144 閱讀 7570

1

/**2

* 執行緒範圍類的資料共享

3* 核心:threadlocal類

4* 實際場景:

5* hibernate的getcurrentsession方法,就是從執行緒範圍內獲取存在的session,如果不存在則新建乙個並繫結到執行緒上

6* struts將乙個請求裡的所有引數繫結到乙個執行緒範圍內的物件裡7*

@author

yzl8*9

*/10

public

class

threadpart_4 catch

(interruptedexception e) 26}

27}28}).start();

2930

new thread(new

runnable() catch

(interruptedexception e) 44}

45}46}).start();47}

48}4950

class

myadd54}

5556

class

mysub60}

6162

/**63

* 單例模式下的

64* 執行緒範圍內共享

65* 執行緒範圍外互不影響

66*

@author

yzl67*68

*/69

class

mythreadlocalobj

7576

public

void

sub()

7980

private

mythreadlocalobj(){};

81private

static threadlocallocal = new threadlocal();

8283

84public

static

mythreadlocalobj getinstance()

88return

local.get();89}

9091

public

intgetdata()

94 }

執行結果:

不同執行緒操作的物件不是同乙個,同乙個執行緒操作的是同乙個

1 thread-0 after add method value :11

2 thread-1 after sub method value :9

3 thread-0 after myadd add method value :12

4 thread-1 after mysub sub method value :8

5 thread-1 after sub method value :7

6 thread-0 after add method value :13

7 thread-1 after mysub sub method value :6

8 thread-0 after myadd add method value :14

9 thread-1 after sub method value :5

10 thread-0 after add method value :15

11 thread-1 after mysub sub method value :4

12 thread-0 after myadd add method value :16

13 thread-0 after add method value :17

14 thread-1 after sub method value :3

15 thread-0 after myadd add method value :18

16 thread-1 after mysub sub method value :2

17 thread-0 after add method value :19

18 thread-0 after myadd add method value :20

19 thread-1 after sub method value :1

20 thread-1 after mysub sub method value :0

4 執行緒範圍內的資料共享之ThreadLocal

1 2 執行緒範圍類的資料共享 3 核心 threadlocal類 4 實際場景 5 hibernate的getcurrentsession方法,就是從執行緒範圍內獲取存在的session,如果不存在則新建乙個並繫結到執行緒上 6 struts將乙個請求裡的所有引數繫結到乙個執行緒範圍內的物件裡7 ...

執行緒範圍內共享資料

我們可以先用所學知識來寫乙個 public class threadscopesharedata start static class a static class b 如果光像上面這樣寫的話,那毫無疑問,肯定是有問題的,如下圖所示並沒有實現執行緒共享 此時就實現執行緒內共享資料了 public c...

執行緒範圍內共享資料

假設現在有個公共的變數data,有不同的執行緒都可以去操作它,如果在不同的執行緒對data操作完成後再去取這個data,那麼肯定會出現執行緒間的資料混亂問題,因為a執行緒在取data資料前可能b執行緒又對其進行了修改,下面寫個程式來說明一下該問題 public class threadscopesh...