package com.xiayu.demo; import lombok.extern.slf4j.Slf4j; import java.util.Locale; @Slf4j public class ThreadLocalDemo { private static ThreadLocal<Integer> count = new ThreadLocal<Integer>(){ @Override protected Integer initialValue() { return 5; } }; //cout的初始值是0 private static ThreadLocal<Locale> language = new ThreadLocal<Locale>(){ @Override protected Locale initialValue() { return Locale.CHINA; } };//languag的初始值爲 public static void main(String[] args) { Thread[] threads = new Thread[5]; for (int i = 0; i < threads.length; i++) { threads[i] = new Thread(() -> { //language Locale lan = language.get(); log.info(Thread.currentThread().getName() + ".language:" + lan); language.set(Locale.ENGLISH); //每一個線程可針對具體場景設置該線程須要的值 log.info(Thread.currentThread().getName() + ".language:" + language.get()); //-------------------------------------------------------------------------------- int num = count.get(); //每一個線程獲取count的一個拷貝 num += 5; count.set(num); //進行加5,後再保存到線程裏面 //... 進行了別的業務操做 count.get();//業務中須要獲取到count的值 log.info(Thread.currentThread().getName() + ":" + count.get()); //再獲取到count的值 count.remove(); language.remove(); }, "thread-" + i); threads[i].start(); } } }
運行結果java
a. set()方法ide
b. get()方法spa
c. remove()方法線程