關於多執行緒訪問靜態方法的問題
小弟最近在做一個專案遇到一點執行緒同步的問題,還沒有找出具體的問題。
懷疑問題出在多執行緒訪問靜態方法上,但沒有找到有相關資料講這方面的問題,所以只好請教一下各位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究竟是怎麼進行處理的?
我自己的理解是對於這樣的靜態方法是先例項化成各執行緒堆疊內的具體方法,然後再進行運算,由於都是區域性變數,沒有使用靜態變數,各執行緒之間是不存在資源衝突的。但沒有找到資料來證實這樣的理解,所以比較煩惱。還請各位幫忙解決一下。
相關文章
- 小小問題―關於java多執行緒Java執行緒
- 關於執行緒的問題...執行緒
- 多執行緒靜態方法同步執行緒
- 多執行緒相關問題執行緒
- 有個關於多執行緒的識別問題執行緒
- 多執行緒問題執行緒
- 關於多執行緒協作的疑問執行緒
- 請教大俠。關於多執行緒同步問題執行緒
- 求助!關於多執行緒連線資料庫的問題執行緒資料庫
- java多執行緒執行問題Java執行緒
- 多執行緒鎖的問題執行緒
- 關於js執行緒問題的解讀JS執行緒
- Java靜態static工具類執行緒安全問題研究Java執行緒
- 關於php生成靜態問題PHP
- 【java 多執行緒】多執行緒併發同步問題及解決方法Java執行緒
- 多執行緒訪問—限制某個方法只執行一次執行緒
- 請教一個關於執行緒的問題執行緒
- 關於執行緒的問題,清高手指點執行緒
- Java多執行緒3:Thread中的靜態方法Java執行緒thread
- Java多執行緒/併發12、多執行緒訪問static變數Java執行緒變數
- 多執行緒問題解釋執行緒
- Hibernate 多執行緒問題!執行緒
- SpringMVC下關於靜態資源訪問SpringMVC
- 如何產生一個C++區域性靜態物件的多執行緒問題C++物件執行緒
- Java多執行緒面試高配問題---多執行緒(3)🧵Java執行緒面試
- 面試中關於多執行緒同步,你必須要思考的問題面試執行緒
- 40個關於Java多執行緒知識點問題總結Java執行緒
- Lance提問筆記:關於map的多執行緒操作筆記執行緒
- 關於線上檢測主執行緒卡頓的問題執行緒
- 關於執行緒插入函式如何用的問題執行緒函式
- 請教關於執行緒的結束問題,急!!!執行緒
- 多執行緒引起的效能問題分析執行緒
- seam中使用多執行緒的問題執行緒
- 一個多執行緒的PushbackInputStream問題執行緒
- 多執行緒程式設計,處理多執行緒的併發問題(執行緒池)執行緒程式設計
- 關於java執行緒釋放資源問題Java執行緒
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- 多執行緒之8鎖問題執行緒