解決執行緒安全問題 使用同步方法

2021-10-07 21:59:28 字數 2195 閱讀 2225

賣票案例出現了執行緒安全問題

賣出了不存在的票和重複的票

解決執行緒安全問題的二種方案:使用同步方法

使用步驟

1.把訪問了共享資料的**抽取出來,放到乙個方法中

2.在方法上新增synchronized修飾符

格式:定義方法的格式

修飾符 synchronized 返回值型別 方法名(引數列表)

1.同步方法

package com.thread.synchronized02;

/* 賣票案例出現了執行緒安全問題

賣出了不存在的票和重複的票

解決執行緒安全問題的二種方案:使用同步方法

使用步驟:

1.把訪問了共享資料的**抽取出來,放到乙個方法中

2.在方法上新增synchronized修飾符

格式:定義方法的格式

修飾符 synchronized 返回值型別 方法名(引數列表)

*/public

class

runnableimpl

implements

runnable}/*

定義乙個同步方法

同步方法也會把方法內部的**鎖住

只讓乙個執行緒執行

*/public

synchronized

void

payticket()

catch

(interruptedexception e)

//先判斷票是否存在

if(ticket>0)

}}/* 定義乙個同步方法

同步方法也會把方法內部的**鎖住

只讓乙個執行緒執行

同步方法的鎖物件是誰?

就是實現類物件 new runnable();

也就是this

*/public

void

payticket()

catch

(interruptedexception e)

//先判斷票是否存在

if(ticket>0)

}}}

**測試類**
package com.thread.synchronized02;

/* 模擬賣票案例

建立3個執行緒,同時開啟,對共享的票進行**

*/public

class

demo01ticket

}

2.靜態同步方法

package com.thread.synchronized02;

/* 賣票案例出現了執行緒安全問題

賣出了不存在的票和重複的票

解決執行緒安全問題的二種方案:使用同步方法

使用步驟:

1.把訪問了共享資料的**抽取出來,放到乙個方法中

2.在方法上新增synchronized修飾符

格式:定義方法的格式

修飾符 synchronized 返回值型別 方法名(引數列表)

*/public

class

runnableimpl3

implements

runnable}/*

靜態同步方法

*/public

static

synchronized

void

payticket()

catch

(interruptedexception e)

//先判斷票是否存在

if(ticket>0)

}/*靜態同步方法

鎖物件是誰?

不能是this

this是建立物件之後產生的,靜態方法優先於物件

靜態方法的鎖物件是本來的class屬性 -->class檔案物件(反射)

*/public

static

/*synchronized*/

void

payticket02()

catch

(interruptedexception e)

//先判斷票是否存在

if(ticket>0)

}}}

多執行緒安全問題 同步方法

2 同步方法 同步方法是指進入該方法時需要獲取this 物件的同步鎖,在方法上使用 synchronized 關鍵字,使用this 物件作為鎖,也就是使用了當前物件,因為鎖住了方法,所以相對於代 碼塊來說效率相對較低。注 靜態同步方法的鎖是該方法所在的類的位元組碼檔案物件,即類名.class 檔案 ...

解決執行緒安全問題

一 1 同步 塊 解決runnable的執行緒安全問題 格式 synchronized 同步監視器 被同步的 操作共享資料的 共享資料 多個執行緒共同操作的變數 同步監視器 俗稱鎖,任何乙個類的物件都可以充當鎖。同步監視器中可以用this充當鎖 2 解決繼承thread類的執行緒安全問題 synch...

使用Lock解決執行緒安全問題

lock介面的概述 lock是jdk1.5 新特性 專門用來實現執行緒安全的技術 lock介面的常用實現類 reentrantlock 互斥鎖 lock介面的常用方法 void lock 獲取鎖 void unlock 釋放鎖 注意事項 獲取鎖和釋放鎖的 必須成對出現。public class ti...