Android 中 ThreadLocal使用示例
Android 中 ThreadLocal使用示例
概要:
Demo描述:
ThreadLocal使用示例.
關(guān)于ThreadLocal的官方文檔描述
Implements a thread-local storage, that is, a variable for which each thread has its own value.
All threads share the same ThreadLocal object, but each sees a different value when accessing it,
and changes made by one thread do not affect the other threads.
The implementation supports null values.
該段文字描述了ThreadLocal的用途:
1.對于同一個變量(即ThreadLocal中保存的變量)對于不同的線程其值是不同的.
2 所有線程共享一個ThreadLocal對象,但是訪問ThreadLocal對象中的變量時得到不同的值
3 某個線程修改了ThreadLocal對象中的變量值時不會影響到其他線程.
舉個例子:
1 主線程中建立一個ThreadLocal對象(mThreadLocal)
2 在主線程中調(diào)用mThreadLocal的set()方法向mThreadLocal中保存一個字符串變量
3 在兩個子線程中調(diào)用mThreadLocal的set()方法向mThreadLocal中保存一個字符串變量
4 在主線程中調(diào)用mThreadLocal的get()方法獲取到mThreadLocal中為主線程保存字符串變量,發(fā)現(xiàn)其值未變.
ThreadLocal的使用在Looper類中得到很好的體現(xiàn).保證了每個線程和一個Looper一一對應(yīng),并且每個Looper之間不受影響.
示例代碼:
MainActivity如下:
package cc.cv; import android.os.Bundle; import android.app.Activity; /** * Demo描述: * ThreadLocal使用示例. * 關(guān)于ThreadLocal的官方文檔描述 * Implements a thread-local storage, that is, a variable for which each thread has its own value. * All threads share the same ThreadLocal object, but each sees a different value when accessing it, * and changes made by one thread do not affect the other threads. * The implementation supports null values. * 該段文字描述了ThreadLocal的用途: * 1 對于同一個變量(即ThreadLocal中保存的變量)對于不同的線程其值是不同的. * 2 所有線程共享一個ThreadLocal對象,但是訪問ThreadLocal對象中的變量時得到不同的值 * 3 某個線程修改了ThreadLocal對象中的變量值時不會影響到其他線程. * * * 舉個例子: * 1 主線程中建立一個ThreadLocal對象(mThreadLocal) * 2 在主線程中調(diào)用mThreadLocal的set()方法向mThreadLocal中保存一個字符串變量 * 3 在兩個子線程中調(diào)用mThreadLocal的set()方法向mThreadLocal中保存一個字符串變量 * 4 在主線程中調(diào)用mThreadLocal的get()方法獲取到mThreadLocal中為主線程保存字符串變量,發(fā)現(xiàn)其值未變. * * * ThreadLocal的使用在Looper類中得到很好的體現(xiàn).保證了每個線程和一個Looper一一對應(yīng),并且每個Looper之間不受影響. * */ public class MainActivity extends Activity { private static ThreadLocal<String> mThreadLocal=new ThreadLocal<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); testThreadLocal(); } private void testThreadLocal(){ //在主線程中調(diào)用ThreadLocal的set()方法保存一個變量 mThreadLocal.set("haha"); System.out.println("ThreadLocal保存的主線的變量值:"+mThreadLocal.get()); new Thread(){ public void run() { //在第一個子線程中調(diào)用ThreadLocal的set()方法保存一個變量 mThreadLocal.set("xixi"); System.out.println("ThreadLocal保存的第一個子線程的變量值:"+mThreadLocal.get()); }; }.start(); new Thread(){ public void run() { //在第二個子線程中調(diào)用ThreadLocal的set()方法保存一個變量 mThreadLocal.set("heihei"); System.out.println("ThreadLocal保存的第二個子線程的變量值:"+mThreadLocal.get()); }; }.start(); try { Thread.sleep(1000*2); //驗(yàn)證在第一個和第二個子線程對于ThreadLocal存儲的變量值的修改沒有影響到ThreadLocal存的主線程變量 System.out.println("ThreadLocal保存的主線的變量值:"+mThreadLocal.get()); } catch (Exception e) { } } }
main.xml如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout>
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Android編程簡單實(shí)現(xiàn)ImageView點(diǎn)擊時背景圖修改的方法
這篇文章主要介紹了Android編程簡單實(shí)現(xiàn)ImageView點(diǎn)擊時背景圖修改的方法,涉及Android針對背景圖相關(guān)屬性設(shè)置的操作技巧,需要的朋友可以參考下2015-12-12Android使用MediaCodec將攝像頭采集的視頻編碼為h264
這篇文章主要為大家詳細(xì)介紹了Android使用MediaCodec將攝像頭采集的視頻編碼為h264,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-10-10Android使用ImageView實(shí)現(xiàn)支持手勢縮放效果
這篇文章主要介紹了Android使用ImageView實(shí)現(xiàn)支持手勢縮放效果,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09Android中PopupWindow彈出式窗口使用方法詳解
這篇文章主要為大家詳細(xì)介紹了Android中PopupWindow彈出式窗口的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-09-09Android用StaticLayout實(shí)現(xiàn)文字轉(zhuǎn)化為圖片效果(類似長微博發(fā)送)
這篇文章主要給大家介紹了關(guān)于Android利用StaticLayout實(shí)現(xiàn)文字轉(zhuǎn)化為圖片效果,實(shí)現(xiàn)的效果類似我們常見的長微博效果,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來一起看看吧。2017-08-08