Java_多線程的兩種實現方式對各種變量的共享

一.前置知識:

  • 靜態變量:靜態變量即類變量,位於方法區,爲所有該類下的對象共享,共享一份內存,一旦靜態變量被修改,其他對象均對修改可見,故線程非安全。
  • 實例變量:單例模式(只有一個對象實例存在)線程非安全,非單例線程安全。       實例變量爲對象實例私有,在虛擬機的堆中分配,若在系統中只存在一個此對象的實例,在多線程環境下,“猶如”靜態變量那樣,被某個線程修改後,其他線程對修改均可見,故線程非安全;如果每個線程執行都是在不同的對象中,那對象與對象之間的實例變量的修改將互不影響,故線程安全。

 

二.解釋

  1.       通過Thread實現線程時,一個線程只能啓動(.start())一次,線程和線程所要執行的任務是捆綁在一起的。該任務在繼承了Thread的類中重寫run()裏體現。也就是說一個任務需啓動一個線程執行,不同的線程(內個類對象.start()後)執行的任務是不相同的,所以兩個線程不能共享彼此任務中的資源。
  2.      而實現了Runnable接口的類(稱爲線程類)中的任務(run()) 被多個線程(實例化的Thread對象)共用,所以共享同一個線程類的變量.
  3. 網上的一張圖。
  4. 當然如果把類中的變量定義成static 則肯定共享了 解釋在上面的第一點。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章