ThreadLocal執行緒範圍內的共享變數
資料庫connection和strut2每個請求用到ThreadLocal
import java.util.Random; public class ThreadLocalTest { private static ThreadLocal<Integer> x = new ThreadLocal<Integer>(); /* * private static ThreadLocal<MyThreadScopeData> myThreadScoprData = new * ThreadLocal<MyThreadScopeData>(); */ public static void main(String[] args) { for (int i = 0; i < 2; i++) { new Thread(new Runnable() { @Override public void run() { int data = new Random().nextInt(); x.set(data); System.out.println(Thread.currentThread().getName() + " has put data:" + data); /* * MyThreadScopeData myData = new MyThreadScopeData(); * myData.setName("yuanhai" + data); myData.setAge("29"); * myThreadScoprData.set(myData); */ MyThreadScopeData.getThreadInstance().setName( "yuanhai" + data); MyThreadScopeData.getThreadInstance().setAge("29"); new A().get(); new B().get(); } }).start(); } } static class A { public void get() { int data = x.get(); System.out.println("A from " + Thread.currentThread().getName() + " get data :" + data); MyThreadScopeData myData = MyThreadScopeData.getThreadInstance(); System.out .println("A from " + Thread.currentThread().getName() + " getMyData :" + myData.getName() + "," + myData.getAge()); } } static class B { public void get() { int data = x.get(); System.out.println("B from " + Thread.currentThread().getName() + " get data :" + data); MyThreadScopeData myData = MyThreadScopeData.getThreadInstance(); System.out .println("B from " + Thread.currentThread().getName() + " getMyData :" + myData.getName() + "," + myData.getAge()); } } } // 實體類單例 class MyThreadScopeData { private MyThreadScopeData() { } public static/* synchronized */MyThreadScopeData getThreadInstance() { MyThreadScopeData instance = map.get(); if (instance == null) { instance = new MyThreadScopeData(); map.set(instance); } return instance; } // private static MyThreadScopeData instance = null;// new MyThreadScopeData(); private String name; private String age; private static ThreadLocal<MyThreadScopeData> map = new ThreadLocal<MyThreadScopeData>(); public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
相關推薦
(三) Java多執行緒詳解之執行緒範圍內共享變數及ThreadLocal類使用
執行緒範圍內共享變數 HashTable方式實現 在開發中經常會遇到一種情況:有一個變數會被多個執行緒訪問,但是要確保同個執行緒內訪問的是同一個物件,Hashtable方式實現程式碼如下: public class ThreadExample5 {
android 執行緒範圍內共享變數以及ThreadLocal的使用
執行緒在java中是一個重頭戲,算是比較難的一快,特別是併發哪一塊,關於併發這一塊,專案上幾乎也沒用到,今天是講執行緒範圍內的共享變數,突然聽到這個概念,可能心裡有點發愣,打個簡單比方:有三個執行緒,
ThreadLocal實現執行緒範圍內共享變數
1.多執行緒範圍內訪問共享物件和資料的方式。 1).如果每個執行緒要執行的程式碼一樣,可以使用同一個Runnable物件,這個Runnable物件中有共享資料,例如:買票系統。 2).每一個執行緒要執行的程式碼不一樣,這樣就需要使用多個Runnable物件了。有以下幾
05_張孝祥_Java多執行緒_執行緒範圍內共享變數的概念與作用
概念 可以將每個執行緒用到的資料與對應的執行緒號存放到一個map集合中,使用資料時從這個集合中根據執行緒號獲取對應執行緒的資料,就可以實現執行緒範圍內共享相同的變數。 程式碼 Runnable中的run()方法裡面執行Thread.currentThrea
JAVA 併發程式設計-執行緒範圍內共享變數(五)
執行緒範圍內共享變數要實現的效果為:多個物件間共享同一執行緒內的變數未實現執行緒共享變數的demo:package cn.itcast.heima2; import java.util.HashMap; import java.util.Map; import java.u
執行緒範圍內共享變數的概念與作用
package cn.cblue.heima2; import java.util.HashMap; import java.util.Map; import java.util.Rando
多執行緒與併發----執行緒範圍內共享變數
執行緒範圍內共享資料圖解:mport java.util.HashMap; import java.util.Map; import java.util.Random; public class Th
Java多執行緒之執行緒範圍內共享變數的概念與作用
要實現執行緒範圍內的資料共享,就是說不管是A模組還是B模組,如果它們現在在同一個執行緒上執行,它們操作的資料應該是同一個,下面的做法就不行: package javaplay.thread.test; import java.util.Random; public
ThreadLocal 執行緒範圍內的共享變數
package cn.itcast.heima2; import java.util.HashMap; import java.util.Map; import java.util.Random; //執行緒範圍內的共享變數 public class ThreadLoc
ThreadLocal執行緒範圍內的共享變數
資料庫connection和strut2每個請求用到ThreadLocalimport java.util.Random; public class ThreadLocalTest { private static ThreadLocal<Integer>
Java併發庫(五、六、七):執行緒範圍內共享資料、ThreadLocal、共享資料的三種方法
深切懷念傳智播客張孝祥老師,特將其代表作——Java併發庫視訊研讀兩遍,受益頗豐,記以後閱 05. 執行緒範圍內共享變數的概念與作用 執行緒範圍內共享資料圖解: 程式碼演示: class ThreadScopeShareData { 三個模組共享資料,主執
ThreadLocal實現執行緒範圍的共享變數
這裡先說下ThreadLocal不是一個執行緒的本地實現版本,不是一個Thread,它是thread local variable(執行緒區域性變數);用於實現執行緒內的資料共享,即對於相同的程式程
執行緒範圍內共享資料(一)
Java開發過程中,若單個執行緒需要在多個物件與模組中訪問同一個變數,則通過靜態變數就可以實現,那麼問題來了,當存在多個執行緒,多個物件與模組去訪問同一變數時,就不行了。例如 public class
多執行緒併發庫高階應用 之 執行緒範圍內共享資料
筆記摘要: 所謂執行緒範圍內共享資料,即對於相同的程式程式碼,多個模組在同一個執行緒中執行時要共享一份資料,而在另外執行緒中執行時又共享另外一份資料, API中為我們提供了一個操作執行緒範圍內共享資料的類ThreadLocal,對於執行緒範
java多執行緒併發庫高階應用 之 執行緒範圍內共享資料
轉自:http://blog.csdn.net/xushuaic/article/category/1335611 筆記摘要: 所謂執行緒範圍內共享資料,即對於相同的程式程式碼,多個模組在同一個執行緒中執行時要共享一份資料,而在另外執行緒中執行時又共
執行緒(五)ThreadLocal解決執行緒範圍內資料的共享
1、該方法缺點是隻能放入一個數據 package 多執行緒; import java.util.Random; //ThreadLocal來完成執行緒範圍內資料的共享 public class pthread { private static ThreadLoca
多執行緒(三) 實現執行緒範圍內模組之間共享資料及執行緒間資料獨立(ThreadLocal)
ThreadLocal為解決多執行緒程式的併發問題提供了一種新的思路。JDK 1.2的版本中就提供java.lang.ThreadLocal,使用這個工具類可以很簡潔地編寫出優美的多執行緒程式,ThreadLocal並不是一個Thread,而是Thread的區域
執行緒範圍內的共享資料 ThreadLocal
一個執行緒執行的時候,可能呼叫a模組,b 模組,c 模組,或者3個變數,各個模組有可能訪問執行緒的資料,假如定義static 的變數,abc 訪問的都是同一個 package com.zkk; import java.util.Random; // 執行緒範圍內的共享
java多執行緒:4、執行緒範圍內的資料共享_公共變數
直接上例項,注意事項已經在程式中做了註釋,以此共勉。加油 import java.util.Map; import java.util.Random; import java.util.concu
多執行緒學習----執行緒範圍內的共享資料(五)
執行緒範圍內的共享變數舉例: 建立三個執行緒,它們都訪問了三個物件,第一個物件設定值,第二三個物件取值,同一個執行緒設定的值,只能被相同的執行緒獲取, public class ThreadScopeShareDataStudy { private static int da