【代码积累】ThreadLocal

来源:互联网 发布:职业目标 知乎 编辑:程序博客网 时间:2024/06/05 08:01
public class Test {public void test() {ThreadId id = new ThreadId();TaskFac fac = new TaskFac();for( int i=0; i< 10; i++ ) {fac.createTask().start();try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}public class Task implements Runnable{private ThreadId id = new ThreadId(); @Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("Task ID ="+ThreadId.get());}}import java.util.concurrent.atomic.AtomicInteger;public class ThreadId {private static final AtomicInteger nextId = new AtomicInteger(0); /*初始化为0,该值用来在每次被引用的时候,生成一个唯一的值*///Thread local variable containing each thread's IDprivate static final ThreadLocal<Integer> threadId = new ThreadLocal<Integer>() {protected Integer initialValue() {  /*initialValuez在基类中是protected,不能在子类覆盖的时候reduce visibility,因此也要加上protected*/return nextId.getAndIncrement();  /*nextId 之所以要是static类型,因为有此static方法引用了它,static方法不能引用non-static的field。 * 这里之所以都定义成static类型,因为non-static本身就是线程安全的,而static是非线程安全的,这里是为了说明在多线程访问的场景下, * ThreadLocal的作用。*/}};public static int get() {return threadId.get();}}public class TaskFac {public Thread createTask() {return new Thread(new Task());}}

原创粉丝点击