執行緒安全問題出現的原因和解決方法

2021-08-06 01:55:00 字數 1000 閱讀 8998

執行緒安全問題:

執行緒安全出現的根本原因:

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 物件的...