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>

最新文章

  1. Android工程师入门(一)——这周入大门,挤时间,轻喷
  2. SQLite数据库在本地可以写,发布到服务器就不能写
  3. shell流程控制语句
  4. MANACHER---求最长回文串
  5. if elseif else
  6. (转)使用inotify、inotify_add_watch、inotify_rm_watch、read编写监控程序
  7. vim技巧和坑
  8. JSP的优势与劣势浅析
  9. 利用虚函数减少导出DLL的头文件依赖
  10. centos 7安装es 及异常处理
  11. 从零到实现Shiro中Authorization和Authentication的缓存
  12. React获得真实的DOM操作
  13. org.apache.jasper.JasperException: /pages/column.jsp (line: 8, column: 1) File &quot;pathTags.jsp&quot; not f
  14. Selenium自动化Chrome浏览器 在windows下窗口最大化
  15. 7、 jade 、 ejs、express集成模板
  16. c链表之oc AutoReleasePool
  17. 2018年10月14日ICPC南京站参赛总结
  18. 如果使用xutils出现了ExceptionInInitializerError这个错误
  19. zeroclipboard实现多浏览器复制到粘贴板功能
  20. 第三周 构造一个简单的Linux系统

热门文章

  1. unity 5.6.1 Oculus手柄输入问题
  2. CODEVS——T 2833 奇怪的梦境
  3. 洛谷 P3199 [HNOI2009]最小圈
  4. django-xadmin使用之配置页眉页脚
  5. vector和list容器之间的复制
  6. 在kettle中实现数据验证和检查
  7. Cocos2d-x第三方类库不支持arm64的问题解决(64位架构)
  8. DDR3内存技术原理
  9. Visual Studio Code Setup
  10. css3中rem和em是干嘛的