程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java多線程與靜態方法,java多線程靜態

Java多線程與靜態方法,java多線程靜態

編輯:JAVA綜合教程

Java多線程與靜態方法,java多線程靜態


Java無基礎開發Android應用,發現對靜態方法理解不夠,有如下問題:

多線程中使用靜態方法會發生什麼事?也就是說多線程訪問同一個類的static靜態方法會發生什麼事?是否會發生線程安全問題

參考: http://my.oschina.net/keyven/blog/219603 

結論:

1,在多線程中使用同一個靜態方法時,每個線程使用各自實例字段(instance field)的副本,而共享一個靜態字段(static field)。所以說,如果該靜態方法不去操作一個靜態成員,只在方法內部使用實例字段(instance field),不會引起安全性問題。

2,加入synchronized關鍵字的靜態方法稱為同步靜態方法

       在訪問同步靜態方法時,會獲取該類的“Class”對象,所以當一個線程進入同步的靜態方法中時,線程監視器獲取類本身的對象鎖其它線程不能進入這個類的任何靜態同步方法。它不像實例方法,因為多個線程可以同時訪問不同實例同步實例方法。這個其實就是操作系統中的用信號量實現進程的互斥與同步問題,如果涉及在同一個類中有多個靜態方法中處理多線程共享數據的話,那就變成用信號量解決生產者-消費者問題。也就是說,靜態方法是一份臨界資源,對靜態方法的訪問屬於進入臨界區;對靜態變量的修改是一份臨界資源,對靜態變量的修改屬於進入臨界區。

3,synchronized 與 static synchronized的區別參考: http://blog.csdn.net/baple/article/details/12080597 

 

其他多線程相關問題:

參考:http://www.lupaworld.com/article-218037-1.html

主要:

1,多線程同步是指對共享資源的訪問控制;

2,實現方式有繼承Thread和Runnable,推薦Runnable方便多重繼承;

3,靜態同步方法在進入的時候線程監視器獲取是該方法所在類的對象鎖

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved