1. 程式人生 > >多執行緒學習筆記 理解一下 執行緒範圍內資料共享,執行緒外獨立

多執行緒學習筆記 理解一下 執行緒範圍內資料共享,執行緒外獨立


多執行緒學習筆記  理解一下 執行緒範圍內資料共享,執行緒外獨立

直接看原始碼:

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) {
		// TODO Auto-generated method stub
		//新建一個執行緒
		for(int i = 0;i < 3 ; i++){
			new Thread(new Runnable(){
				@Override
				public void run() {
					// TODO Auto-generated method stub
					data = new Random().nextInt();// data是一個隨機的整數
					System.out.println(Thread.currentThread().getName()+" has put data: "+data);
					threadData.put(Thread.currentThread(), data);
					new A().get();
					new B().get();
					//執行緒內的共享, 執行緒外的獨立
				}
			}).start();
		}
	}
	//寫兩個模組A B
	static class A{
	  public int get(){
		  int data = threadData.get(Thread.currentThread());
		  System.out.println("get data from A "+Thread.currentThread().getName()+" "+data);
		 return data;
	  }
	}
	static class B{
		public int get(){
			 int data  = threadData.get(Thread.currentThread());
			 System.out.println("get data from B "+Thread.currentThread().getName()+" "+data);
			 return data;
		}
	}
}


原始碼的意思是分別啟動三個執行緒, 執行緒執行的動作是往 執行緒中放入資料, 模組A, B取出資料, 主要看模組A, B取出的資料是否一致,一致說明執行緒內資料是共享的

三個執行緒, 每個執行緒都有一個數據,這個資料,線上程之間是相互獨立的,這個說明,執行緒之間的獨立。

具體看執行結果:

Thread-0 has put data: 366637873
Thread-1 has put data: 1831120335
get data from A Thread-1 1831120335
get data from B Thread-1 1831120335
get data from A Thread-0 366637873
get data from B Thread-0 366637873
Thread-2 has put data: 340475499
get data from A Thread-2 340475499
get data from B Thread-2 340475499