執行緒安全問題解決方案

2021-10-10 22:32:07 字數 1560 閱讀 5630

實現賣票案例出現了執行緒安全問題,賣出了不存在和重複的票

解決執行緒安全的第一種方法:使用同步**塊

格式:synchronized(鎖物件)

注意:1.同步**塊中的鎖物件,可以使用任意物件

2.但是必須保證多個執行緒使用的鎖物件是同乙個

3.鎖物件作用:把同步**塊鎖住,只讓乙個執行緒在同步**塊中執行

原理總結:同步的執行緒,沒有執行完畢不會釋放鎖,同步外的執行緒沒有鎖進不去同步

例:

public

class

runnableimpl

implements

runnable

catch

(interruptedexception e)

//賣票

system.out.

println

(thread.

currentthread()

.getname()

+"-->正在賣第"

+ticket+

"張票");

ticket--;}

}}}}

2.解決執行緒安全的第二種方法:使用同步方法

使用步驟:

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

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

格式:定義方法的格式

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

原理:同步方法也會把方法內部的**鎖住,只讓乙個執行緒執行,同步方法的鎖物件就是實現類物件new runnableimpl,也就是this

例:

public

class

runnableimpl

implements

runnable

}//定義乙個同步方法

public

synchronized

void

payticket()

catch

(interruptedexception e)

//賣票

system.out.

println

(thread.

currentthread()

.getname()

+"-->正在賣第"

+ ticket +

"張票");

ticket--;}

}}

解決執行緒安全的第三種方法:使用lock鎖

使用步驟:

1.在成員位置建立乙個reentrantlock物件

2.在可能會出現執行緒安全問題的**前呼叫lock介面中的方法lock獲取鎖

3.在可能會出現執行緒安全問題的**後呼叫lock介面中的方法unlock釋放鎖

例:

public

class

runnableimpl2

implements

runnable

catch

(interruptedexception e)

finally}}

}}

AppScan安全問題解決方案

一 環境準備 三 高危常見問題解決方案 1.sql盲注 主要就是通過注入sql的關鍵字,來破壞原有的查詢,導致頁面報錯 a.看看幾種常見的盲注方式 b.解決方案 思路 sql注入與sql盲注實際的攻入方式不同,但是解決思路都是通過過濾特殊字元,只是過濾的字元稍有差異。實際解決 從以上幾種注入可以看出...

Ajax跨域安全問題解決方案

伺服器方解決方案 一 建立filter解決 1.獲取請求的httpservletresponse response及httpservletrequest request 2.獲取請求頭中的 origin access control allow headers 3.設定請求頭引數 設定請求域 acc...

物件發布和初始化時的執行緒安全問題解決方案

我們來看方法返回乙個private物件的這種情況 public class unsafestates public string getstates 如果按照上述方式來發布states,就會出現問題。因為任何呼叫者都能修改這個陣列的內容。在這個示例中,陣列states已經逸出了它所在的作用越,因為這...