單個執行緒範圍內的資料共享,就是確保當前的執行緒在執行的過程中,各個模組所引用的資料是乙份,且所引用的資料不會因為其他執行緒的操作而變化。
public class threadscopesharedata
}).start();
//執行緒2
new thread(new runnable()
}).start();
}}class a
}class b
}
控制台輸出:
根據控制台的結果,可以看出,由於定義了static的變數儲存資料,那麼當執行緒2更改了data資料後,執行緒1中 a模組和b模組取出的和當初執行緒1放入的不是乙個值,如何解決這個問題呢?見如下**:
一、使用全域性的map變數實現
public class threadscopesharedata
}).start();
//執行緒2
new thread(new runnable()
}).start();
}}class a
}class b
}
二、使用threadlocal類,實現單個執行緒範圍內 單個變數的資料共享
public class threadscopesharedata
}).start();
//執行緒2
new thread(new runnable()
}).start();
}}class a
}class b
}
三、使用threadlocal實現 單個執行緒內 多個變數的資料共享實現多個資料的共享可以使用map去存放資料,這裡就不說了 就是把threadlocal中的integer替換成map即可,主要貼一下使用物件儲存多個變數的**實現
①建立乙個用於存放共享資料的類
/**
* 存放共享資料的物件
* @author ***
* */
class sharedataobj
/*** 返回從threadlocal中取出當前執行緒的sharedataobj物件
* @return
*/public static sharedataobj getinstance4currentthread()
return dataobj;
}//data1
private int data1;
//data2
private string data2;
public int getdata1()
public void setdata1(int data1)
public string getdata2()
public void setdata2(string data2)
}
②操作共享資料
public class threadscopesharedata
}).start();
//執行緒2
new thread(new runnable()
}).start();
}}class a
}class b
}
mybatis中如何傳遞單個String型別的引數
目錄 使用mybatis介面引數只有乙個string的時候 如果不指定 param 的話mybatis去會把parametertype引數預設成介面的引數型別然後對於xml裡的 引數 去呼叫該型別下引數a 的get set方法然後就報錯了。使用了 param註解 mybatis就會一一對應賦值就不會...
Java中volatile實現執行緒間變數共享
size medium b volatile變數自身具有下列特性 b 可見性。對乙個volatile變數的讀,總是能看到 任意執行緒 對這個volatile變數最後的寫入。原子性 對任意單個volatile變數的讀 寫具有原子性,但類似於volatile 這種復合操作不具有原子性。上面講的是vola...
java之jersey實現單個,多個檔案上傳
post produces mediatype.consumes mediatype.multipart form data path docuupload public resultentity uploaddocuments formdataparam docuname string docun...