synchronized同步方法(菜鳥玩執行緒)

2021-08-31 01:19:33 字數 2177 閱讀 5402

共享變數類

package com.chapter02.thread1;

public

class

hasselfprivatenum

else

system.out.

println

(username +

" num = "

+ num);}

catch

(interruptedexception e)

}}

自定義執行緒a
package com.chapter02.thread1;

public

class

threada

extends

thread

@override

public

void

run(

)}

自定義執行緒b
package com.chapter02.thread1;

public

class

threadb

extends

thread

@override

public

void

run(

)}

啟動類
package com.chapter02.thread1;

public

class

run}

執行結果
a set over!

b set over!

b num = 200

a num = 100

結論

方法中的變數不存在非執行緒安全問題,永遠都是執行緒安全的。

共享變數類

package com.chapter02.thread1;

public

class

hasselfprivatenum

else

system.out.

println

(username +

" num = "

+ num);}

catch

(interruptedexception e)

}}

自定義執行緒a
package com.chapter02.thread1;

public

class

threada

extends

thread

@override

public

void

run(

)}

自定義執行緒b
package com.chapter02.thread1;

public

class

threadb

extends

thread

@override

public

void

run(

)}

啟動類
package com.chapter02.thread1;

public

class

run}

執行結果
//如果不新增synchronized

a set over!

b set over!

b num = 200

a num = 200

//如果新增synchronized

a set over!

a num = 100

b set over!

b num = 200

結論

在兩個執行緒訪問同乙個物件中的同步方法時一定是執行緒安全的。

修改實驗2**,修改啟動類

package com.chapter02.thread1;

public

class

run}

輸出結果
a set over!

b set over!

b num = 200

a num = 100

結論

上面的示例 建立了2個hasselfprivatenum類的物件,所以產生了2個鎖。

執行緒同步synchronized

synchronized只是保證在同乙個時刻,其他執行緒不能訪問鎖定的資源,但是其他方法或者是變數不能鎖定控制的 synchronized obj 上面語法格式中synchronized後括號裡的obj就是同步監視器,上面 的含義是 執行緒開始執行同步 塊之前,必須先獲得對同步監視器的鎖定。任何時刻...

synchronized同步方法

關鍵字synchronized 如果是在方法內的變數,則無所謂的的變數同步問題。因為在方法內部的變數都是私有的。synchronized如果是加在方法上面,則是對該物件的例項進行同步。如果有兩個執行緒同時對該方法進行操作,則會同步進行。對個例項多個執行緒,不存在同步的問題,那時jvm會生成多個鎖,應...

Synchronized同步方法

非執行緒安全 其實會在多個執行緒對同乙個物件中的例項變數進行併發訪問時發生,產生的後果就是 髒讀 也就是取到的資料其實是被更改過的。1 方法內的變數為執行緒安全的 方法內部的私有變數,則不存在 非執行緒安全 的問題,所得結果也就是 執行緒安全 的。2 例項變數非執行緒安全 如果多個執行緒共同訪問乙個...