執行緒之 鎖 synchronized鎖

2021-10-05 07:23:05 字數 1254 閱讀 6781

多執行緒中有寫程式是由一寫bug的,學習執行緒鎖,很經典的例子,買票案例

有a,b,c三個視窗,同時售賣100張票,最後可能會出現賣了重複的票,或者多賣了,賣超了等執行緒不安全問題

看乙個執行緒不安全的賣票**:

小明,小張,小王同時去買票,就會出現上面的執行緒不安全問題,因為,視窗1賣了1張票,而另外兩個視窗不知道,又把第一張票賣了出去,所有會出現賣超,重複賣等不安全問題

public

class

testthread4

implements

runnable

catch

(interruptedexception e)

system.out.

println

(thread.

currentthread()

.getname()

+"拿到了第:"

+ticket--

+"票");

}else}}

public

static

void

main

(string[

] args)

}

出現了執行緒不安全問題應該怎麼修改呢?

新增乙個執行緒鎖:synchronized

簡簡單單乙個乙個鎖,就可以解決問題,可在日常我們寫**的時候,這個鎖我們應該新增在**呢?

在這個程式裡,要判斷是否有票,如果有票,要賣票,所以會減少,所以鎖就會加在判斷是否有票這個方法上,一般情況下,鎖應該夾在有 「增刪改」 資料的地方,可以是方法,也可以是屬性

public

class

unsafebuyticket

}class

buyticket

implements

runnable

}//判斷是否有票

private

synchronized

void

buy(

)//模擬延時

trycatch

(interruptedexception e)

//買票

system.out.

println

(thread.

currentthread()

.getname()

+"賣了第"

+tickernums--

+"票");

}}

執行緒之互斥鎖

在乙個多執行緒的程式中,有時需要同時對共享資源的訪問,就會造成對共享資源的讀寫問題。例如 有五個執行緒,其中乙個對共享資源進行修改,其餘四個執行緒需要同時對共享資源進行讀訪問。勢必會造成其餘四個執行緒讀取資料的不穩定。此時就可以使用互斥鎖去解決這一問題。當修改共享資源的執行緒需要對資料進行修改時,首...

java併發程式設計之Synchronized關鍵字

1.synchronized關鍵字使用前介紹 1 使用synchronized關鍵字修飾方法,ps 在這裡要特別需要注意的是,當有兩個或者以上執行緒的時候,其中有乙個執行緒獲取了該方法的物件鎖執行同步方法的時候,其他的執行緒仍然可以訪問其他的非使用synchronized的方法,也就是非同步的了。2...

java併發程式設計之synchronized

上篇部落格沒寫好,排版改了好多次,看著實在頭疼所以就沒準備往下寫了,今天講下同步使用到的關鍵字synchronized,這個關鍵字可以是用在方法上,也可以使用再 塊上,synchronized作用在方法上,它的鎖物件是當前例項物件 public class syncthreadtest implem...