執行緒安全問題:
執行緒安全出現的根本原因:
1.存在兩個或者兩個以上的執行緒物件共享同乙個資源;
2.多執行緒操作共享資源**有多個語句。
執行緒安全問題的解決方案(2個):
方式一:同步**塊
格式:synchronize(鎖物件)
同步**塊需要注意的事項:
1.鎖物件可以是任意的乙個物件;
2.乙個執行緒在同步**塊中sleep了,並不會釋放鎖物件;
4.鎖物件必須是多執行緒共享的乙個資源,否則鎖不住。
例子:三個視窗售票
class saleticket extends thread
@override
public void run() catch (interruptedexception e)
num--;
}else
}
} }
} public class demo4
}
方式二:同步函式(同步函式就是使用synchronized修飾乙個函式)
同步函式注意事項:
1.如果函式是乙個非靜態的同步函式,那麼鎖物件是this物件;
2.如果函式是靜態的同步函式,那麼鎖物件是當前函式所屬的類的位元組碼檔案(class物件);
3.同步函式的鎖物件是固定的,不能由自己指定。
例子:兩夫妻取錢
class bankthread extends thread
@override //
public synchronized void run() else
}} }
public class demo1 }
原因:
1.同步**塊的鎖物件可以由我們自由指定,方便控制;
2.同步**塊可以方便的控制需要被同步**的範圍,同步函式必須同步函式的所有**。
java多執行緒安全問題出現的原因以及解決思路
出現原因 1 某乙個操作不是原子性的操作 2 同一時間有多個執行緒同時執行這個操作 這時就可能會出現多執行緒安全的問題 如以下 有庫存,只是舉例 public inventorycatch exception e this.num dcount system.out.print this.num e...
解決執行緒安全問題
一 1 同步 塊 解決runnable的執行緒安全問題 格式 synchronized 同步監視器 被同步的 操作共享資料的 共享資料 多個執行緒共同操作的變數 同步監視器 俗稱鎖,任何乙個類的物件都可以充當鎖。同步監視器中可以用this充當鎖 2 解決繼承thread類的執行緒安全問題 synch...
解決執行緒的安全問題
synchronized的底層是使用作業系統的mutex lock實現的。1.作為方法的修飾符 方法的定義前面synchronized intadd int a,int b synchronized static intadd int a,int b 2.作為同步 塊synchronized 物件的...