ThreadLocal 入门
来源:互联网 发布:igbt芯片 知乎 编辑:程序博客网 时间:2024/06/04 18:43
ThreadLocal类它代表一个线程的局部变量,通过把数据放在ThreadLocal中就可以让每个线程创建一个该变量副本,从而避免并发访问的线程安全问题。
ThreadLocal并不能替代同步机制,两者面向的问题领域不同。同步机制是为了同步多个线程对相同资源的并发访问,是多个线程之间进行通信的有效方式;而ThreadLocal是为了隔离多个线程的数据共享,从根本上避免多个线程之间对共享资源(变量)的竞争,也就不需要对多个线程进行同步了。
通常我们认为:多个线程之间需要共享资源,以达到线程之间的通信功能,就使用同步机制;如果仅仅需要隔离多个线程之间的共享冲突,则可以使用ThreadLocal。
package hb.threadlocal;public class Account {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 name) {this.name.set(name);}}
package hb.threadlocal;public class MyThread extends Thread {private Account account;public MyThread(Account account,String name){super(name);this.account = account;}public void run(){for(int i=0;i<10;i++){if(i==6){account.setName(getName());}System.out.println(account.getName()+"账户的i 值" + i);}}}
package hb.threadlocal;public class ThreadLocalTest {public static void main(String[] args) {Account at = new Account("huangbiao");new MyThread(at,"线程一").start();new MyThread(at,"线程二").start();}}
备注:两个线程使用了同一个对象at,但是在两个线程中互不影响,因为两个线程使用的是两个完全相同的副本,即使修改了当前线程的内容,也不会影响到其他的线程。
思路:创建一个线程类,这个类中有ThreadLocal对象或者包含ThreadLocal作为属性的对象的作为属性,然后再启动线程,从ThreadLocal中获取共享的数据
运行结果:
---- huangbiao
null账户的i 值0
null账户的i 值1
null账户的i 值0
null账户的i 值1
null账户的i 值2
null账户的i 值3
null账户的i 值4
null账户的i 值5
线程二账户的i 值6
线程二账户的i 值7
线程二账户的i 值8
线程二账户的i 值9
null账户的i 值2
null账户的i 值3
null账户的i 值4
null账户的i 值5
线程一账户的i 值6
线程一账户的i 值7
线程一账户的i 值8
线程一账户的i 值9
- ThreadLocal 入门
- 线程安全和ThreadLocal入门
- ThreadLocal的简单入门使用
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- servlet和JSP学习
- java 反射学习
- Class.forName()的作用?为什么要用?
- sql案例:删除多条内容相同的数据,只保留一条
- how to run tempest in devstack within vmware workstation
- ThreadLocal 入门
- ligerToolBar
- flex调用webservice中的自定义类
- 多个线程之间共享数据
- 别扔硬盘,里面可能有 7500 个比特币
- 线程面试题
- OVF文件研究
- Eclipse 重构变量(名) 快捷键
- TI-Davinci开发系列之四CCS5.2使用XDS560v2在线调试ARM/DSP程序