JAVA-ThreadLocal使用例子备忘
概念
1.以下为多线程情况下,使用ThreadLocal的例子
/** * 以下为多线程情况下,使用ThreadLocal的例子 */ private static final ThreadLocal<Integer> THREAD_LOCAL_NUM = new ThreadLocal<Integer>() { @Override protected Integer initialValue() { return 0; } }; public static void main(String[] args) { for (int i = 0; i < 3; i++) { new Thread(new Runnable() { @Override public void run() { add10ByThreadLocal(); } }).start(); } } private static void add10ByThreadLocal() { for (int i = 0; i < 5; i++) { //从当前线程的ThreadLocal中获取默认值 Integer n = THREAD_LOCAL_NUM.get(); n += 1; //往当前线程的ThreadLocal中设置值 THREAD_LOCAL_NUM.set(n); System.out.println(Thread.currentThread().getName() + " : ThreadLocal num=" + n); } }
2.以下为多线程情况下,不使用ThreadLocal的例子
/** * 以下为多线程情况下,不使用ThreadLocal的例子 */ private static Integer number = 1; public static void main(String[] args) { for (int i = 0; i < 3; i++) { new Thread(()->{ add10ByThreadLocal(); }).start(); } } private static void add10ByThreadLocal() { for (int i = 0; i < 5; i++) { //从当前线程的ThreadLocal中获取默认值 Integer n = number; number += 1; System.out.println(Thread.currentThread().getName() + " : ThreadLocal num=" + n); } }