javaSE 併發程式設計(執行緒間通訊)

2021-09-08 18:18:48 字數 1919 閱讀 4501

新建乙個資源類resource

定義成員變數string name

定義成員變數int age

新建乙個輸入類input

,實現runnable介面

定義乙個構造方法input()

,傳入引數:

resource物件

實現run()方法

定義while(true)

往resuorce

物件的屬性賦值

新建乙個輸出類output

,實現runnable介面

定義乙個構造方法output()

,傳入引數:

resource物件

實現run()方法

定義while(true)

列印resuorce

物件的屬性

main方法中

獲取resource

物件,new出來

獲取input

物件,new

出來,構造引數:

resource物件

獲取output

物件,new

出來,構造引數:

resource物件

獲取thread

物件,new

出來,構造引數:

runnable物件

呼叫thread

物件的start()

方法,開啟執行緒

此時會有執行緒安全問題,檢視結果可以發現,漢字和拼音的混了

陶士涵*****男

taoshihan*****nan

陶士涵*****nan

陶士涵*****nan

陶士涵*****男

陶士涵*****男

陶士涵*****nan

陶士涵*****nan

taoshihan*****nan

taoshihan*****nan

使用synchronized(){}

同步**塊包裹操作同乙個資源的地方

注意同步執行緒的個數,所有的執行緒都應該加上

注意是否是同乙個鎖,synchronized()

括號內的鎖引數:保證是個唯一的資源

使用synchronized(){}

包裹上面的賦值和列印,鎖:

resource

物件(唯一的)

檢視結果,此時沒有安全問題

陶士涵*****男

陶士涵*****男

陶士涵*****男

taoshihan*****nan

taoshihan*****nan

taoshihan*****nan

死鎖問題:同步中巢狀同步,並且鎖不一致,此時會造成死鎖問題

/**

* 資源

* *

@author

taoshihan

* */class

resource

/*** 輸入

* *

@author

taoshihan

* */class input implements

runnable

@override

public

void

run()

else

flag = !flag;}}

}}/**

* 輸出

* *

@author

taoshihan

* */class output implements

runnable

@override

public

void

run() }}

}public

class

inputoutputdemo

}

併發程式設計(6)執行緒間通訊

1.基本概念 wait 將同步執行緒處於凍結狀態,釋放執行權,同時將執行緒物件儲存到執行緒池 notify 喚醒執行緒池中某個等待執行緒 notifyall 喚醒執行緒池中所有執行緒 2.注意 1 這些方法都需要定義在同步中 2 這些方法必須要標示所屬的鎖 3 為什麼這三個方法要被定義在object...

三 併發程式設計之多執行緒間通訊

1 wait notify方法 1.1 wait notify必須在synchronized中進行使用 public class respublic class inthread extends thread override public void run catch interruptedexc...

Java併發程式設計 執行緒通訊

1.wait和notify方法 配合synchronize使用,屬於object方法 private volatile static list list new arraylist public void add public int size public static void main str...