热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android中ThreadLocal使用示例

这篇文章主要介绍了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 mThreadLocal=new ThreadLocal(); 
  @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如下:

 
 
   
 
 

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


推荐阅读
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • ABBYY FineReader:高效PDF转换、精准OCR识别与文档对比工具
    在处理PDF转换和OCR识别时,您是否遇到过格式混乱、识别率低或图表无法正常识别的问题?ABBYY FineReader以其强大的功能和高精度的识别技术,完美解决这些问题,帮助您轻松找到最终版文档。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • HTML基础入门指南
    本文将深入浅出地介绍HTML的基础知识,包括其定义、开发工具、制定机构、特性、基本标签及更多实用内容。 ... [详细]
  • 深入解析AUTOSAR方法论:汽车电子系统开发的理论基础(第三部分)
    本文详细探讨了AUTOSAR方法论在汽车电子软件系统开发中的应用,涵盖了从系统配置到生成可执行代码的各个关键步骤。通过介绍各阶段的任务和工具支持,帮助读者全面理解AUTOSAR的设计流程。 ... [详细]
  • ssm框架整合及工程分层1.先创建一个新的project1.1配置pom.xml ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • Spring Boot 中静态资源映射详解
    本文深入探讨了 Spring Boot 如何简化 Web 应用中的静态资源管理,包括默认的静态资源映射规则、WebJars 的使用以及静态首页的处理方法。通过本文,您将了解如何高效地管理和引用静态资源。 ... [详细]
  • SpringMVC RestTemplate的几种请求调用(转)
    SpringMVCRestTemplate的几种请求调用(转),Go语言社区,Golang程序员人脉社 ... [详细]
  • ArcXML:互联网空间数据交换的专用语言
    ArcXML是一种专为ArcIMS平台设计的数据交换协议,基于XML标准,用于在不同组件之间传输和描述地理空间数据。本文将详细介绍ArcXML的背景、用途及其与XML的关系。 ... [详细]
  • 本文详细介绍如何使用 Python 集成微信支付的三种主要方式:Native 支付、APP 支付和 JSAPI 支付。每种方式适用于不同的应用场景,如 PC 网站、移动端应用和公众号内支付等。 ... [详细]
  • 搭建Jenkins、Ant与TestNG集成环境
    本文详细介绍了如何在Ubuntu 16.04系统上配置Jenkins、Ant和TestNG的集成开发环境,涵盖从安装到配置的具体步骤,并提供了创建Windows Slave节点及项目构建的指南。 ... [详细]
  • 优化Jenkins首次启动速度
    本文详细描述了在启动Jenkins后遇到的长时间加载问题,并提供了一种通过修改更新中心配置文件来显著提升启动速度的有效解决方案。 ... [详细]
author-avatar
yunzjyun
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有