java并发编程学习之ThreadLocal

栏目: Java · 发布时间: 7年前

内容简介:本地线程,通常用于防止对可变的单实例对象或全局变量进行共享,常见的比如数据库连接。可以将ThreadLocal<T>视为Map<Thread,T>,虽然实际上并不是这样实现的。也可以把事务上下文保存在ThreadLocal中,虽然方便处理一些功能,但是隐性增加了耦合度,降低了代码的可重用性,因此尽量避免滥用ThreadLocal。ThreadLocal提供了get和set常用的方法,set是用来设置值,get是用来获取set设置的最新的值。这些值相对于使用改变量的线程存有的一份独立的副本。运行结果如下:

用途

本地线程,通常用于防止对可变的单实例对象或全局变量进行共享,常见的比如数据库连接。可以将ThreadLocal<T>视为Map<Thread,T>,虽然实际上并不是这样实现的。也可以把事务上下文保存在ThreadLocal中,虽然方便处理一些功能,但是隐性增加了耦合度,降低了代码的可重用性,因此尽量避免滥用ThreadLocal。ThreadLocal提供了get和set常用的方法,set是用来设置值,get是用来获取set设置的最新的值。这些值相对于使用改变量的线程存有的一份独立的副本。

例子

public class NotSafeDemo2 {
    private ThreadLocal<Integer> num = new ThreadLocal<>();

    public void add(int value) {
        try {
            if (null == num.get()) {
                num.set(0);
            }
            int temp = num.get();
            num.set(num.get() + value);
            Thread.sleep(100);
            System.out.println(value + "+" + temp + "=" + num.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        NotSafeDemo2 synchronizeDemo = new NotSafeDemo2();
        AddThread3 addThread3 = new AddThread3(synchronizeDemo);
        AddThread4 addThread4 = new AddThread4(synchronizeDemo);
        addThread3.start();
        addThread4.start();
    }
}

class AddThread3 extends Thread {
    NotSafeDemo2 synchronizeDemo;

    public AddThread3(NotSafeDemo2 synchronizeDemo) {
        this.synchronizeDemo = synchronizeDemo;
    }

    @Override
    public void run() {
        synchronizeDemo.add(1);

    }
}

class AddThread4 extends Thread {
    NotSafeDemo2 synchronizeDemo;

    public AddThread4(NotSafeDemo2 synchronizeDemo) {
        this.synchronizeDemo = synchronizeDemo;
    }

    @Override
    public void run() {
        synchronizeDemo.add(2);
    }
}

运行结果如下:

java并发编程学习之ThreadLocal

这里直接更改 java并发编程学习之synchronize(一) 的例子,可以看到,num的值不被线程共享。


以上所述就是小编给大家介绍的《java并发编程学习之ThreadLocal》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Bulletproof Ajax中文版

Bulletproof Ajax中文版

Jeremy Keith / 刘申、宋薇 / 人民邮电出版社 / 2007-11 / 39.00元

本书介绍了如何构建无懈可击的Ajax Web应用程序,重点讲述如何在已有Web站点使用Ajax增强网站用户体验,从而尽可能地保证网站拥有最大限度的可移植性和亲和力,这正是目前大多数网站面临的需求。书中主要介绍了JavaScript、DOM、XMLHttpRequest、数据格式等,同时还提出了一种Hijax方法,即可以让Web应用程序平稳退化的方法。 本书适合各层次Web开发和设计人员阅读......一起来看看 《Bulletproof Ajax中文版》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

SHA 加密
SHA 加密

SHA 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具