public class Test { public static ThreadLocal<Integer> local = new ThreadLocal<Integer>(); public static ExecutorService service = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); public static void main(String[] args) { for (int i = 0; i < 100; i++) { service.execute(new Runnable() { @Override public void run() { if (Test.local.get() == null) { Test.local.set(1); } else { Test.local.set(Test.local.get() + 1); } System.out.println(Thread.currentThread().getName() + " " + Test.local.get()); } }); } service.shutdown(); } }
执行后的结果,看见执行后线程中的变量是更新了,但是在一个线程处理多个任务时候不能使用。
pool-1-thread-2 1 pool-1-thread-2 2 pool-1-thread-3 1 pool-1-thread-3 2 pool-1-thread-3 3 pool-1-thread-3 4 pool-1-thread-3 5 pool-1-thread-3 6 pool-1-thread-3 7 pool-1-thread-3 8 pool-1-thread-3 9 pool-1-thread-3 10 pool-1-thread-3 11 pool-1-thread-3 12 pool-1-thread-3 13 pool-1-thread-3 14 pool-1-thread-3 15 pool-1-thread-2 3 pool-1-thread-1 1 pool-1-thread-4 1