当前位置: 首页 > news >正文

贵州安顺网站建设/品牌推广软文案例

贵州安顺网站建设,品牌推广软文案例,如何做网站的登录日志,免费购物网站模板一、ThreadLocal类说明 ThreadLocal,很容易让人望文生义,直译"本地线程"。ThreadLocal不是一个thread,是thread的局部变量。使用ThreadLocal维护变量时,它为每个使用它的线程提供独立的线程副本,每个线程可以改变自己的副本,而不会影响到其它线程对应的副本。 从线程…

一、ThreadLocal类说明

  ThreadLocal,很容易让人望文生义,直译"本地线程"。ThreadLocal不是一个thread,是thread的局部变量。使用ThreadLocal维护变量时,它为每个使用它的线程提供独立的线程副本,每个线程可以改变自己的副本,而不会影响到其它线程对应的副本。

  从线程的角度看,目标变量就象是线程的本地变量,这也是类名中"Local"所要表达的意思。

二、ThreadLocal常用方法

①、当前变量的初始值
  protected T initialValue() 

源码 如下,该方法是一个protected方法,显然是为了让子类覆盖而设计的。该方法是在get|set会调用,且只会被调一次。ThreadLocal缺省实现直接返回null

protected T initialValue() {return null;}

②、设置当前线程的线程局部变量值

  void set(T value)

③、返回当前线程的线程局部变量值

  public T get()

④、删除当前线程的线程局部变量值,节省内存的占用。

  public void remove()

三、下面我们通过一个具体例子,看看ThreadLocal的具体用法---Id生成器

id生成器

public interface Sequence {public int getId();
}public class LocalSequenceImpl implements Sequence {private ThreadLocal<Integer> container = new ThreadLocal<Integer>() {@Overrideprotected Integer initialValue() {return 0;};};@Overridepublic int getId() {container.set(container.get() + 1);return container.get();}}

线程

public class ThreadLocalDemo extends Thread {private static Sequence obj;@SuppressWarnings("static-access")public ThreadLocalDemo(Sequence obj) {this.obj = obj;}public void run() {for (int i = 0; i < 3; i++) {System.out.println(Thread.currentThread().getName() + " : " + obj.getId());}}public static void main(String[] args) {Sequence obj = new LocalSequenceImpl();test(obj);}static void test(Sequence obj) {ThreadLocalDemo thread1 = new ThreadLocalDemo(obj);ThreadLocalDemo thread2 = new ThreadLocalDemo(obj);ThreadLocalDemo thread3 = new ThreadLocalDemo(obj);thread1.start();thread2.start();thread3.start();}
}

结果  : 

Thread-0 : 1
Thread-1 : 1
Thread-1 : 2
Thread-2 : 1
Thread-2 : 2
Thread-2 : 3
Thread-1 : 3
Thread-0 : 2
Thread-0 : 3

从上述结果,每个线程只会更改自己的局部变量,并没有发生互相干扰的情况。可以看出来,ThreadLocal为使用它的线程提供独立的副本。

不信?我们下面再通过一个不使用ThreadLocal来验证下。

public class SequenceImpl implements Sequence {private static int id = 0;@Overridepublic int getId() {id = id + 1;return id;}
}

 

 结果

Thread-0 : 2
Thread-0 : 4
Thread-0 : 5
Thread-2 : 3
Thread-2 : 6
Thread-2 : 7
Thread-1 : 1
Thread-1 : 8
Thread-1 : 9

 

 仔细观察下结果,三个线程同时访问一个局部变量id,发生了互相干扰的情况。

 

四、拓展

看下ThreadLocal源码,底层是用Map实现的。我们可以自己设计一个ThreadLocal

public class MyThreadLocal<T> {private Map<Thread, T> container = Collections.synchronizedMap(new HashMap<>());public void set(T value) {container.put(Thread.currentThread(), value);}public T get() {Thread currentThread = Thread.currentThread();T value = container.get(Thread.currentThread());if(value == null && !container.containsKey(currentThread)) {value = initialValue();container.put(Thread.currentThread(), value);}return value;}protected T initialValue() {return null;}
}

 

转载于:https://www.cnblogs.com/chenmo-xpw/p/5598736.html

http://www.jmfq.cn/news/4865401.html

相关文章:

  • 如何做网站测试/百度大数据查询怎么用
  • 怎么建立免费个人网站/重庆森林电影
  • 赞美对方公司网站做的好的日语/网上推广怎么收费
  • 专业的网站建设服务交易平台/怎么做网络销售
  • 台州哪里做网站/培训机构专业
  • 天津网站建设报价/搜索引擎优化学习
  • adobe做网站的软件/360安全浏览器
  • 中国最大的网站/临沂网站建设方案服务
  • 网站开发的检索速度在啥范围之内/线下推广有哪些渠道
  • 厦门网站建设网页设计/弹窗广告最多的网站
  • 自己做社交网站/输入关键词自动生成标题
  • 大学网站建设多少钱/网络营销案例分析
  • phpstudy做正式网站/重庆企业免费建站
  • 如何做教育网站/新闻发布平台有哪些
  • 如何提升顾客的体验和服务/小时seo
  • 施工企业环境管理体系/优化网站推广教程整站
  • 芯互联大厦做网站的/百度图片识别
  • 阜阳网站建设公司/图片优化
  • 网站自己怎么制作/怎么推广自己的微信号
  • 公司网站建设ppt/百度的代理商有哪些
  • 网站建设策划方案/百度关键词搜索排行
  • 网络规划设计师教程(第2版)/搜索引擎排名优化价格
  • 海北wap网站建设/最近一周热点新闻
  • 百度怎么收录自己的网站/nba体育新闻
  • wordpress.分页工具/seo北京
  • 站长之家网站素材/北京网站快速优化排名
  • 久久建筑网是山东省的吗/附子seo教程
  • 浚县网站建设/关键词提取工具app
  • wordpress中文评论插件/三门峡网站seo
  • 买表的网站/买卖友情链接