package com.gshx.zf.zhlz.controller; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicInteger; public class ThreadId { // Atomic integer containing the next thread ID to be assigned private static final AtomicInteger nextId = new AtomicInteger(0); // Thread local variable containing each thread's ID private static final ThreadLocal<Integer> threadId = new ThreadLocal<Integer>() { @Override protected Integer initialValue() { return nextId.getAndIncrement(); } }; private static final Object object = threadId; // Returns the current thread's unique ID, assigning it if necessary public static int get() { return threadId.get(); } public static void main(String[] args) { List<ThreadLocal<Integer>> list = new CopyOnWriteArrayList<>(); List<Integer> integerList = new CopyOnWriteArrayList<>(); new Thread(new Runnable() { @Override public void run() { threadId.get(); list.add(threadId); integerList.add(threadId.get()); } }).start(); new Thread(new Runnable() { @Override public void run() { threadId.get(); list.add(threadId); integerList.add(threadId.get()); } }).start(); new Thread(new Runnable() { @Override public void run() { threadId.get(); list.add(threadId); integerList.add(threadId.get()); } }).start(); System.out.println(threadId); System.out.println(threadId); for(Integer integer : integerList){ System.out.println(integer); } for(ThreadLocal<Integer> threadLocal1 : list){ System.out.println(threadLocal1.get()); } } }
ThreadLocal引用測試
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.