歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java線程范圍內的共享數據

線程范圍內的共享數據,在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

Copyright © Linux教程網 All Rights Reserved