1. 程式人生 > >ThreadLocal執行緒範圍內的共享變數

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