java多线程同步ThreadLocal类,实例分享

java中的知识点是非常多的,复杂又丰富,很需要时间去学习。今天就来为大家介绍一下,java多线程同步ThreadLocal类的实例分享,一起来了解一下吧。

ThreadLocal类的常用方法

ThreadLocal() : 创建一个线程本地变量

get() : 返回此线程局部变量的当前线程副本中的值

initialValue() : 返回此线程局部变量的当前线程的"初始值"

set(T value) : 将此线程局部变量的当前线程副本中的值设置为value

代码如下所示:

public class Bank
{
    private static ThreadLocal < Integer > count = new ThreadLocal < Integer > ()
    {
        @Override
        protected Integer initialValue()
        {
            // TODO Auto-generated method stub  
            return 0;
        }
    };
    // 存钱
    public void addMoney(int money)
    {
        count.set(count.get() + money);
        System.out.println(System.currentTimeMillis() + "存进:" + money);
    }
    // 取钱
    public void subMoney(int money)
    {
        if (count.get() - money < 0)
        {
            System.out.println("余额不足");
            return;
        }
        count.set(count.get() - money);
        System.out.println(+System.currentTimeMillis() + "取出:" + money);
    }
    // 查询
    public void lookMoney()
    {
        System.out.println("账户余额:" + count.get());
    }
}

运行结果:只让存,不让取,如下图:

java多线程同步ThreadLocal类

ThreadLocal的原理:

如果使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本,副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。

即每个线程运行的都是一个副本,也就是说存钱和取钱是两个账户,只是名字相同而已,两个线程间的count没有关系。所以就会发生上面的效果。

ThreadLocal与同步机制

a.ThreadLocal与同步机制都是为了解决多线程中相同变量的访问冲突问题

b.前者采用以”空间换时间”的方法,后者采用以”时间换空间”的方式

ThreadLocal并不能替代同步机制,两者面向的问题领域不同。

1:同步机制是为了同步多个线程对相同资源的并发访问,是为了多个线程之间进行通信的有效方式;

2:而threadLocal是隔离多个线程的数据共享,从根本上就不在多个线程之间共享变量,这样当然不需要对多个线程进行同步了

以上就是关于java多线程同步ThreadLocal类的实例分享了。如果你对java知识感兴趣,想要了解更多java实例,敬请关注奇Q工具网。

推荐阅读:

java多线程同步方法,同步代码块,实例展示

java多线程编程书哪本比较好?

java多线程编程详解