線程范圍內的共享數據,在JavaEE中比較常用,Android比較少。
一個線程調用A,B,C三個模塊,模塊中的表達式或變量調用訪問一個數據,這個數據可以是靜態的。
另一個線程也調用A,B,C三個模塊,模塊中的表達式或變量訪問的數據,就不是剛才的數據,而是另一個同樣的代碼,一個線程身上一分數據
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class ThreadScopeShareData {
private static int data = 0;
private static Map<Thread, Integer> threadData = new HashMap<Thread,Integer>();
public static void main(String[] args) {
for(int i = 0;i<2;i++){
new Thread(new Runnable() {
public void run() {
int data = new Random().nextInt();
System.out.println(Thread.currentThread().getName()+
" has put data: "+data);
threadData.put(Thread.currentThread(),data);
new A().get();
new B().get();
}
}).start();
}
}
static class A{
public void get(){
int data = threadData.get(Thread.currentThread());
System.out.println("A from "+Thread.currentThread().getName()+
" get data: "+data);
}
}
static class B{
public void get(){
int data = threadData.get(Thread.currentThread());
System.out.println("B from "+Thread.currentThread().getName()+
" get data: "+data);
}
}
}
應用場景:數據庫,一個方法是輸入數據,一個方法是輸出數據,兩個獨立的對象,
A在向B輸入數據,B在向外輸出數據,A->B->
C在向D輸入數據,D在向外輸出數據,C->D->
兩條線共用同一個鏈接對象,如果C這條線路結束了,提交結果,那麼不就把A所在的線程中斷了麼,所以每一條線程上操作的都是自己的數據,線程操作的數據,是自己線程范圍內的數據,與另外線程上的數據無關(銀行轉賬也是如此)
Java多線程從簡單到復雜 http://www.linuxidc.com/Linux/2014-07/104435.htm
Java多線程經典案例 http://www.linuxidc.com/Linux/2014-06/103458.htm
Java多線程:ReentrantReadWriteLock讀寫鎖的使用 http://www.linuxidc.com/Linux/2014-06/103457.htm
Java內存映射文件實現多線程下載 http://www.linuxidc.com/Linux/2014-05/102201.htm
Java多線程:一道阿裡面試題的分析與應對 http://www.linuxidc.com/Linux/2014-03/98715.htm
Java中兩種實現多線程方式的對比分析 http://www.linuxidc.com/Linux/2013-12/93690.htm
以上實例演示了,線程范圍內,(不同模塊)數據共享,線程范圍外,數據獨立
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-12/110336p2.htm