package com.learn.test;
/**
* @author liuqi
* @date 2020/3/4 23:23
* @desc
*
* 注:ThreadLocal和synchronized 相比前一个以空间取代时间,
* 每个访问同一个变量的线程都拥有该变量的一个副本
* ,后一个以时间代替空间,多个线程访问会进行排队 拿到的是同一个变量
*/
public class ThreadLocalDemo3 {
//使用ThreadLocal 维护唯一的变量
private static ThreadLocal<Integer> number = new ThreadLocal<Integer>() {
//去看ThreadLcoal的源代码,重写initialVal()方法,否则返回null
protected Integer initialValue() {
return 0;
}
};
//拿到下一个号码
public Integer getNext() {
//ThreadLocal变量在调用set或者是get方法的时候,才回去调用initialValue() 且调用一次
number.set(number.get()+1);
System.out.println(Thread.currentThread().getName()+": "+number.get());
return number.get();
}
public static void main(String[] args) {
ThreadLocalDemo3 demo3=new ThreadLocalDemo3();
new Thread(()->{
for(int i=0;i<10;i++){
demo3.getNext();
}
},"线程1").start();
new Thread(()->{
demo3.getNext();
},"线程2").start();
}
}
ThreadLocal用法简单示例
最新推荐文章于 2024-03-20 22:56:36 发布