關於多執行緒訪問靜態方法的問題
小弟最近在做一個專案遇到一點執行緒同步的問題,還沒有找出具體的問題。
懷疑問題出在多執行緒訪問靜態方法上,但沒有找到有相關資料講這方面的問題,所以只好請教一下各位java高手了。
我的原來程式是這樣設計的,對於一些常用的方法,都用靜態方法來實現,在多執行緒程式中直接呼叫,靜態方法由於沒有使用靜態變數,所以沒有進行執行緒同步。
類似以下程式:
class ThreadI {
public static void main(String[] arg) {
TestI p = new TestI("thread 1");
new TestI("thread 2").start();
new TestI("thread 3").start();
new TestI("thread 4").start();
new TestI("thread 5").start();
new TestI("thread 6").start();
new TestI("thread 7").start();
new TestI("thread 8").start();
new TestI("thread 9").start();
new TestI("thread 10").start();
new TestI("thread 11").start();
new TestI("thread 12").start();
new TestI("thread 13").start();
new TestI("thread 14").start();
new TestI("thread 15").start();
new TestI("thread 16").start();
new TestI("thread 17").start();
new TestI("thread 18").start();
new TestI("thread 19").start();
new TestI("thread 20").start();
p.start();
}
}
class TestI extends Thread {
String s ;
TestI(String sTemp){
this.s = sTemp;
}
public void run() {
try{
Thread.currentThread().sleep( 1000*5);
}catch(Exception ex){}
for(int i=0;i<100;i++){
System.out.println(T.t( this.s + " "+ i));
}
}
}
class T{
public static String t(String sTemp){
String aa = sTemp;
return aa;
}
}
從上面的例子程式打出的結果,我看不出有執行緒訪問衝突的地方。
我的疑問是:對於T.t這種靜態方法,在不同執行緒呼叫時,jvm究竟是怎麼進行處理的?
我自己的理解是對於這樣的靜態方法是先例項化成各執行緒堆疊內的具體方法,然後再進行運算,由於都是區域性變數,沒有使用靜態變數,各執行緒之間是不存在資源衝突的。但沒有找到資料來證實這樣的理解,所以比較煩惱。還請各位幫忙解決一下。
懷疑問題出在多執行緒訪問靜態方法上,但沒有找到有相關資料講這方面的問題,所以只好請教一下各位java高手了。
我的原來程式是這樣設計的,對於一些常用的方法,都用靜態方法來實現,在多執行緒程式中直接呼叫,靜態方法由於沒有使用靜態變數,所以沒有進行執行緒同步。
類似以下程式:
class ThreadI {
public static void main(String[] arg) {
TestI p = new TestI("thread 1");
new TestI("thread 2").start();
new TestI("thread 3").start();
new TestI("thread 4").start();
new TestI("thread 5").start();
new TestI("thread 6").start();
new TestI("thread 7").start();
new TestI("thread 8").start();
new TestI("thread 9").start();
new TestI("thread 10").start();
new TestI("thread 11").start();
new TestI("thread 12").start();
new TestI("thread 13").start();
new TestI("thread 14").start();
new TestI("thread 15").start();
new TestI("thread 16").start();
new TestI("thread 17").start();
new TestI("thread 18").start();
new TestI("thread 19").start();
new TestI("thread 20").start();
p.start();
}
}
class TestI extends Thread {
String s ;
TestI(String sTemp){
this.s = sTemp;
}
public void run() {
try{
Thread.currentThread().sleep( 1000*5);
}catch(Exception ex){}
for(int i=0;i<100;i++){
System.out.println(T.t( this.s + " "+ i));
}
}
}
class T{
public static String t(String sTemp){
String aa = sTemp;
return aa;
}
}
從上面的例子程式打出的結果,我看不出有執行緒訪問衝突的地方。
我的疑問是:對於T.t這種靜態方法,在不同執行緒呼叫時,jvm究竟是怎麼進行處理的?
我自己的理解是對於這樣的靜態方法是先例項化成各執行緒堆疊內的具體方法,然後再進行運算,由於都是區域性變數,沒有使用靜態變數,各執行緒之間是不存在資源衝突的。但沒有找到資料來證實這樣的理解,所以比較煩惱。還請各位幫忙解決一下。
相關文章
- 多執行緒相關問題執行緒
- 有個關於多執行緒的識別問題執行緒
- 關於js執行緒問題的解讀JS執行緒
- 關於php生成靜態問題PHP
- SpringMVC下關於靜態資源訪問SpringMVC
- 多執行緒問題解釋執行緒
- 多執行緒引起的效能問題分析執行緒
- Python | 多執行緒死鎖問題的巧妙解決方法Python執行緒
- 面試中關於多執行緒同步,你必須要思考的問題面試執行緒
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- 多執行緒之8鎖問題執行緒
- 05.java多執行緒問題Java執行緒
- 關於物件導向的方法並行執行的問題物件並行
- 模板方法中的執行緒安全問題執行緒
- J2SE - 關於SimpleDateFonnat的執行緒安全問題執行緒
- Java多執行緒面試高配問題---多執行緒(3)🧵Java執行緒面試
- Spring中多執行緒的使用及問題Spring執行緒
- 多執行緒的安全性問題(三)執行緒
- HashMap多執行緒併發問題分析HashMap執行緒
- 多執行緒的執行緒狀態及相關操作執行緒
- 多執行緒,你覺得你安全了?(執行緒安全問題)執行緒
- Faiss使用多執行緒出現的效能問題AI執行緒
- 多執行緒 日誌 和截圖的問題執行緒
- 多執行緒的安全問題及解決方案執行緒
- BATJ都愛問的多執行緒面試題BAT執行緒面試題
- 關於python訪問字典的方法Python
- 關於Java多執行緒的執行緒同步和執行緒通訊的一些小問題(順便分享幾篇高質量的博文)Java執行緒
- 5分鐘搞懂多執行緒安全問題執行緒
- 如何解決多執行緒併發問題執行緒
- 多執行緒併發安全問題詳解執行緒
- 40 個 Java 多執行緒問題總結Java執行緒
- Java多執行緒和併發問題集Java執行緒
- fastapi 關於執行緒池、同步、非同步的問題解答彙總ASTAPI執行緒非同步
- 拜託!別再問我多執行緒的這些問題了執行緒
- ArrayList 的執行緒安全問題執行緒
- iOS多執行緒全套:執行緒生命週期,多執行緒的四種解決方案,執行緒安全問題,GCD的使用,NSOperation的使用iOS執行緒GC
- Python執行緒安全問題及解決方法Python執行緒
- 03 執行緒安全問題執行緒
- SimpleDateFormat 執行緒安全問題ORM執行緒