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);
//驗證在第一個和第二個子線程對于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)文章
如何調(diào)用百度地圖API實現(xiàn)手機(jī)自動定位
api手機(jī)自動定位,通過聲明地址解析器,獲取當(dāng)前坐標(biāo),如何調(diào)用百度地圖api實現(xiàn)手機(jī)自動定位呢?接下來,一起跟小編來學(xué)習(xí)吧。2015-09-09
Android編程實現(xiàn)通訊錄中聯(lián)系人的讀取,查詢,添加功能示例
這篇文章主要介紹了Android編程實現(xiàn)通訊錄中聯(lián)系人的讀取,查詢,添加功能,涉及Android權(quán)限控制及通訊錄相關(guān)操作技巧,需要的朋友可以參考下2017-07-07
Android Handler移除Message詳解及實例代碼
這篇文章主要介紹了Android Handler移除Message詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02
Kotlin開發(fā)實戰(zhàn)之hello world
這篇文章主要為大家詳細(xì)介紹了Kotlin開發(fā)實戰(zhàn)之hello world的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05
Android筆記之:App應(yīng)用之發(fā)布各廣告平臺版本的詳解
Android的廣告平臺是很多的,各市場對各平臺的接受程度是不一樣的,Android的開發(fā)者如果想集成廣告基本要考慮下面兩個問題2013-04-04
Android中 自定義數(shù)據(jù)綁定適配器BaseAdapter的方法
本篇文章小編為大家介紹,Android中 自定義數(shù)據(jù)綁定適配器BaseAdapter的方法。需要的朋友參考下2013-04-04
利用 kotlin 的方式自定義回調(diào)事件(kotlin函數(shù)參數(shù))
這篇文章主要介紹了利用 kotlin 的方式自定義回調(diào)事件(kotlin函數(shù)參數(shù)),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03

