Android 中 ThreadLocal使用示例

 更新时间:2017年09月04日 10:28:10   作者:lfdfhl  
这篇文章主要介绍了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基于google Zxing实现各类二维码扫描效果

    Android基于google Zxing实现各类二维码扫描效果

    这篇文章主要介绍了Android基于google Zxing实现各类二维码扫描效果的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • Android基于CountDownView的时间控件扩展

    Android基于CountDownView的时间控件扩展

    这篇文章主要为大家详细介绍了Android基于CountDownView的时间控件扩展,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • RxJava实战之订阅流基本原理示例解析

    RxJava实战之订阅流基本原理示例解析

    这篇文章主要为大家介绍了RxJava实战之订阅流基本原理示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Android中使用Expandablelistview实现微信通讯录界面

    Android中使用Expandablelistview实现微信通讯录界面

    本文主要介绍了Android中使用Expandablelistview实现微信通讯录界面(完善防微信APP)的方法,具有一定的参考价值,下面跟着小编一起来看下吧
    2016-12-12
  • Android Flutter实现仿闲鱼动画效果

    Android Flutter实现仿闲鱼动画效果

    目前正在做的项目,为了增加用户的体验度,准备增加一些动画效果。本文将通过Android Flutter实现仿闲鱼动画效果,感兴趣的可以尝试一下
    2023-02-02
  • Android评论图片可移动顺序选择器(推荐)

    Android评论图片可移动顺序选择器(推荐)

    这篇文章主要介绍了 Android评论图片可移动顺序选择器的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • Android实现图像切换器

    Android实现图像切换器

    这篇文章主要为大家详细介绍了Android实现图像切换器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • Android okhttp3.0忽略https证书的方法

    Android okhttp3.0忽略https证书的方法

    这篇文章主要介绍了 Android okhttp3.0忽略https证书的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • 查看 Android Studio NDK流程详解

    查看 Android Studio NDK流程详解

    这篇文章主要为大家介绍了查看 Android Studio NDK流程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • listview Button始终放在底部示例

    listview Button始终放在底部示例

    android实现底部布局往往使用RelativeLayout的布局方式,以下的例子就是实现三层布局的底部布局的功能,感兴趣的朋友可以参考下哈,希望对大家有所帮助
    2013-07-07

最新评论