Android 中 ThreadLocal使用示例
android 中 threadlocal使用示例
概要:
demo描述:
threadlocal使用示例.
关于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 在主线程中调用mthreadlocal的set()方法向mthreadlocal中保存一个字符串变量
3 在两个子线程中调用mthreadlocal的set()方法向mthreadlocal中保存一个字符串变量
4 在主线程中调用mthreadlocal的get()方法获取到mthreadlocal中为主线程保存字符串变量,发现其值未变.
threadlocal的使用在looper类中得到很好的体现.保证了每个线程和一个looper一一对应,并且每个looper之间不受影响.
示例代码:
mainactivity如下:
package cc.cv; import android.os.bundle; import android.app.activity; /** * demo描述: * threadlocal使用示例. * 关于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 在主线程中调用mthreadlocal的set()方法向mthreadlocal中保存一个字符串变量 * 3 在两个子线程中调用mthreadlocal的set()方法向mthreadlocal中保存一个字符串变量 * 4 在主线程中调用mthreadlocal的get()方法获取到mthreadlocal中为主线程保存字符串变量,发现其值未变. * * * threadlocal的使用在looper类中得到很好的体现.保证了每个线程和一个looper一一对应,并且每个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(){ //在主线程中调用threadlocal的set()方法保存一个变量 mthreadlocal.set("haha"); system.out.println("threadlocal保存的主线的变量值:"+mthreadlocal.get()); new thread(){ public void run() { //在第一个子线程中调用threadlocal的set()方法保存一个变量 mthreadlocal.set("xixi"); system.out.println("threadlocal保存的第一个子线程的变量值:"+mthreadlocal.get()); }; }.start(); new thread(){ public void run() { //在第二个子线程中调用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>
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
推荐阅读
-
Android 中 ThreadLocal使用示例
-
Android编程实现使用handler在子线程中更新UI示例
-
android中使用Html渲染的方式实现必填项前面的*号示例
-
Android中SharedPreference使用实例讲解
-
Android中通知Notification使用实例(振动、灯光、声音)
-
Android使用Sensor感应器实现线程中刷新UI创建android测力计的功能
-
分享Android中pullToRefresh的使用心得
-
Android 中利用 ksoap2 调用 WebService的示例代码
-
IO中flush()函数的使用代码示例
-
PHP模板引擎Smarty中变量的使用方法示例