java之ThreadLocal简单使用总结(2)

简介: java之ThreadLocal简单使用总结(2)

3、测试代码

package com.sangfor.threadlocal;
public class TestThreadLocal {
  public static final ThreadLocal<Integer> sThreadLocal = new ThreadLocal<Integer>(){
     @Override
       protected Integer initialValue() {
       return 0;
       }
  };
  public static void main(String[] args) {
    for (int i = 0; i < 10; i++) {
      new MyThread(i).start();
    }
  }
  static class MyThread extends Thread {
    public int index;
    public MyThread(int index) {
      this.index = index;
    } 
    @Override
    public void run() {
      System.out.println("线程" + index + "的初始value:" + sThreadLocal.get());
            for (int i = 0; i < 10; i++) {
              sThreadLocal.set(sThreadLocal.get() + i);
              }
          System.out.println("线程" + index + "的累加value:" + sThreadLocal.get());
        }
  }
}

4、运行结果

线程0的初始value:0
线程0的累加value:45
线程1的初始value:0
线程1的累加value:45
线程2的初始value:0
线程2的累加value:45
线程3的初始value:0
线程3的累加value:45
线程4的初始value:0
线程4的累加value:45
线程5的初始value:0
线程5的累加value:45
线程6的初始value:0
线程7的初始value:0
线程7的累加value:45
线程6的累加value:45
线程8的初始value:0
线程8的累加value:45
线程9的初始value:0
线程9的累加value:45

5、总结

用ThreadLocal修饰的变量,感觉就是每个线程都拥有一份原始数据的拷贝,每个线程只能修改自己的数据,其它线程不可以修改

相关文章
|
9月前
|
存储 Java 数据安全/隐私保护
探索Java中神奇的ThreadLocal:为什么它是多线程编程的重要工具?
探索Java中神奇的ThreadLocal:为什么它是多线程编程的重要工具?
122 0
|
存储 Java
java之线程死锁和ThreadLocal的使用
java之线程死锁和ThreadLocal的使用
|
5月前
|
算法 安全 Java
JAVA并发编程系列(12)ThreadLocal就是这么简单|建议收藏
很多人都以为TreadLocal很难很深奥,尤其被问到ThreadLocal数据结构、以及如何发生的内存泄漏问题,候选人容易谈虎色变。 日常大家用这个的很少,甚至很多近10年资深研发人员,都没有用过ThreadLocal。本文由浅入深、并且才有通俗易懂方式全面分析ThreadLocal的应用场景、数据结构、内存泄漏问题。降低大家学习啃骨头的心理压力,希望可以帮助大家彻底掌握并应用这个核心技术到工作当中。
|
6月前
|
存储 安全 Java
Java 中的 ThreadLocal 变量
【8月更文挑战第22天】
56 4
|
7月前
|
存储 SQL Java
(七)全面剖析Java并发编程之线程变量副本ThreadLocal原理分析
在之前的文章:彻底理解Java并发编程之Synchronized关键字实现原理剖析中我们曾初次谈到线程安全问题引发的"三要素":多线程、共享资源/临界资源、非原子性操作,简而言之:在同一时刻,多条线程同时对临界资源进行非原子性操作则有可能产生线程安全问题。
123 1
|
8月前
|
存储 安全 Java
深入理解Java中的ThreadLocal机制:原理、方法与使用场景解析
深入理解Java中的ThreadLocal机制:原理、方法与使用场景解析
128 2
|
7月前
|
存储 缓存 Java
Java面试题:解释Java中的内存屏障的作用,解释Java中的线程局部变量(ThreadLocal)的作用和使用场景,解释Java中的锁优化,并讨论乐观锁和悲观锁的区别
Java面试题:解释Java中的内存屏障的作用,解释Java中的线程局部变量(ThreadLocal)的作用和使用场景,解释Java中的锁优化,并讨论乐观锁和悲观锁的区别
73 0
|
7月前
|
并行计算 算法 安全
Java面试题:解释Java内存模型的内存屏障,并讨论其对多线程并发的影响,解释Java中的线程局部变量(ThreadLocal)的工作原理,解释Java中的ForkJoinPool的工作原理
Java面试题:解释Java内存模型的内存屏障,并讨论其对多线程并发的影响,解释Java中的线程局部变量(ThreadLocal)的工作原理,解释Java中的ForkJoinPool的工作原理
66 0
|
7月前
|
Java 数据库连接
Java面试题:Java内存模型中的happens-before关系,Java中的ThreadLocal是如何工作的?Java中的CountDownLatch和CyclicBarrier的区别?
Java面试题:Java内存模型中的happens-before关系,Java中的ThreadLocal是如何工作的?Java中的CountDownLatch和CyclicBarrier的区别?
53 0
|
9月前
|
存储 Java
Java的ThreadLocal使用
Java的ThreadLocal使用
45 1