欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 中 ThreadLocal使用示例

程序员文章站 2023-12-15 23:30:52
android 中 threadlocal使用示例 概要: demo描述:   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> 

 如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

上一篇:

下一篇: