多個執行緒在執行的過程中的不確定性引起執行結構的不穩定,同時多個執行緒對同一資料的共享操作,造成操作的不完整性,破壞資料。
當某個執行緒在操作車票過程中,尚未操作完成時,其他執行緒也參與進來,操作車票,使車票的資料共享,出現執行緒安全問題。
那麼可以通過同步**塊和同步方法的方式來解決執行緒安全問題,實現執行緒的同步。
方式 1 . 同步**塊
1.1通過多執行緒繼承方式實現**塊同步機制
public
class
threadtest
extends
thread
}class
saleticket
extends
thread
catch
(interruptedexception e)
system.out.
println
(thread.
currentthread()
.getname()
+"賣票,票號為"
+ticket)
; ticket--;}
else}}
}}
1.2通過實現runnable介面方式實現**塊同步機制
class
saleticket
implements
runnable
catch
(interruptedexception e)
system.out.
println
(thread.
currentthread()
.getname()
+"賣票,票號為"
+ticket)
; ticket--;}
else}}
}}public
class
windowtest1
}
方式 2 . 同步方法
2.1多執行緒繼承方式和同步方法結合,實現同步機制
public
class
windowtest4
}class
saleticket
extends
thread
}// 通過 static show方法,實現synchronized,這裡不再需要同步監視器
private
static
synchronized
void
show()
catch
(interruptedexception e)
system.out.
println
(thread.
currentthread()
.getname()
+"賣票,票號為"
+ticket)
; ticket--;}
}}
2.2多執行緒實現runnable介面方式和同步方法結合,實現同步機制
class
window1
implements
runnable
}// 通過show方法,實現synchronized
public
synchronized
void
show()
catch
(interruptedexception e)
system.out.
println
(thread.
currentthread()
.getname()
+"賣票,票號為"
+ ticket)
; ticket--;}
}}public
class
windowtest3
}
總結:
1.在非靜態的同步**塊中,同步監視器可以是this,對於靜態的同步**塊中,同步監視器可以是當前類本身
private
int ticket=
100;
@override
public
void
run(
)}
public
static
int ticket=
100;
@override
public
void
run(
)}
2.在同步方法中仍然設計到同步監視器,在這裡我們不需要在顯示的宣告 執行緒同步問題
昨天簡單研究了一點執行緒的同步問題 package com.pb.thread public class waymakethread 建立乙個執行緒,繼承thread類 class mythread extends thread 建立乙個類,實現runable介面,這不是乙個執行緒類 class m...
執行緒同步問題
建立多執行緒實現3個視窗賣票,一共30張票,每個視窗各賣10張,一次賣一張 執行緒同步 public class ticketdemo3 class station1 extends thread else try catch interruptedexception e 編寫兩個執行緒,乙個執行緒...
多執行緒同步問題
在應用程式中使用多個執行緒的乙個好處是每個執行緒都可以非同步執行。對於 windows 應用程式,耗時的任務可以在後台執行,而使應用程式視窗和控制項保持響應。對於伺服器應用程式,多執行緒處理提供了用不同執行緒處理每個傳入請求的能力。否則,在完全滿足前乙個請求之前,將無法處理每個新請求。然而,執行緒的...