多執行緒學習筆記 理解一下 執行緒範圍內資料共享,執行緒外獨立
阿新 • • 發佈:2019-02-12
多執行緒學習筆記 理解一下 執行緒範圍內資料共享,執行緒外獨立
直接看原始碼:
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