ThreadLocal类和volatile关键字

多线程处理共享数据时候,会把共享数据从主内存复制到当前线程运行环境本地内存。

对于这份数据,多线程之间是隔离的。自己处理自己的互相不会干涉。


public class Test {
    //定义
    private static final ThreadLocal<Integer> threadLocal = new ThreadLocal<>();
    public static volatile int age = 10;
    public static void main(String[] args) {


        //第一个测试线程
        new Thread(()->{
            threadLocal.set(age);
            Integer integer = threadLocal.get();
            while (integer > 0){
                synchronized (""){
                    int i = integer--;
                    System.out.println(i +":" + Thread.currentThread().getName());
                }
            }
        }).start();

        //第2个测试线程
        new Thread(()->{
            threadLocal.set(age);
            Integer integer = threadLocal.get();
            while (integer > 0){
                synchronized (""){
                    int i = integer--;
                    System.out.println(i +":" + Thread.currentThread().getName());
                }
            }
        }).start();     
    }
}

输出结果

10:Thread-0

9:Thread-0

8:Thread-0

7:Thread-0

6:Thread-0

5:Thread-0

4:Thread-0

3:Thread-0

2:Thread-0

1:Thread-0

10:Thread-1

9:Thread-1

8:Thread-1

7:Thread-1

6:Thread-1

5:Thread-1

4:Thread-1

3:Thread-1

2:Thread-1

1:Thread-1

每个线程都执行 integer-- 这个运算操作,java中运算操作是非线程安全的(但是变量赋值操作是线程安全的)。因此加一个snyc修饰保证方法同步执行。

通俗理解:

类常量age = 10分别给了两个互相隔离的线程就变成两个线程间互不干涉的副本

线程 t1的age = 10;

线程 t2的age = 10;

在jvm中sny修饰的代码块或者是lock实现同步,当同步的代码块执行完毕之后才会把本地内存中的变量刷新到主内存中。volatile关键字则是保证多线程之间共享变量的可见性。也就是当前执行操作执行共享变量修改之后会立刻同步到主内存。使用场景多用于一线程写入,其他线程读取。

转载于:Java中的ThreadLocal详解 - 简书 (ThreadLocal)

Java volatile关键字最全总结:原理剖析与实例讲解(简单易懂)_volatile关键字原理_老鼠只爱大米的博客-CSDN博客volatile

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值