二、线程相关类ThreadLocal
2015-10-19 10:46
288 查看
/* * Creation : 2015年10月17日 */ package com.tan.thread.ThreadLocal; class Account { // ①创建线程局部变量:name private ThreadLocal<String> name = new ThreadLocal<String>(); public Account(String str) { this.name.set(str); System.out.println("---->" + this.name.get()); } // ②取出线程变量 public String getName() { return name.get(); } //③修改线程局部变量 public void setName(String str) { this.name.set(str); } } class MyTest extends Thread { private Account account; public MyTest(String name, Account account) { super(name); this.account = account; } @Override public void run() { for (int i = 0; i < 10; i++) { if(i==6){ account.setName(getName()); } System.out.println(account.getName()+"账户i的值:"+i); } } } /** * 线程相关类 * ThreadLocal:线程局部变量 作用:为每一个使用该变量的线程都提供一个变量值的副本,使每一个线程可以独立的修改自己 的副本而不会和其他线程的副本发生冲突。 * ThreadLocal的3个public方法: |-T get() |-void remove() |-void set(T value) * * ThreadLocal * * 目的:为了解决多线程对同一变量的访问冲突 * * 现象:2个线程在进行循环i=6时会将线程名改为与用户名相同 * * 结果:实际上账户名有3个副本,主线程一个,另外2个线程各一个,它们的值互不干扰,每个线程拥有自己的独立的线程局部变量。 * * 结论:如果多个线程之间需要共享资源以达到线程之间的通信功能就可以使用同步机制,如果仅仅是为了隔离多个线程之间的共享冲突就可以使用ThreadLocal. */ public class ThreadLocalTest { public static void main(String[] args) { Account account=new Account("初始名"); new MyTest("线程A", account).start(); new MyTest("线程B", account).start(); } } /* ---->初始名 -->主线程访问 有一个默认值 null账户i的值:0 null账户i的值:1 null账户i的值:2 null账户i的值:3 null账户i的值:4 null账户i的值:5 线程A账户i的值:6 -->i==6后 第一个线程在这个时候被赋值 线程A账户i的值:7 线程A账户i的值:8 线程A账户i的值:9 null账户i的值:0 null账户i的值:1 null账户i的值:2 null账户i的值:3 null账户i的值:4 null账户i的值:5 线程B账户i的值:6 -->i==6后 第二个线程在这个时候被赋值 线程B账户i的值:7 线程B账户i的值:8 线程B账户i的值:9 */
相关文章推荐
- java-模拟tomcat服务器
- C#多线程之Thread中Thread.IsAlive属性用法分析
- Android开发笔记之:如何安全中止一个自定义线程Thread的方法
- java thread start()和run()方法简析
- Java中Runnable和Thread的区别分析
- Android开发笔记之:Handler Runnable与Thread的区别详解
- C#多线程之Thread中Thread.Join()函数用法分析
- Mysql Error Code : 1436 Thread stack overrun
- MySQL错误Forcing close of thread的两种解决方法
- c#线程Thread示例
- Java之Thread的join方法实例
- java中thread线程start和run的区别
- JAVA多线程Thread和Runnable的实现
- java多线程编程之使用thread类创建线程
- python线程锁(thread)学习示例
- C#中Finally的一个不太常见的用法
- java并发编程简介
- JDK高性能编程之多线程
- Java Thread Dumps 日志分析
- Thead的yield和sleep的区别