【代码积累】ThreadLocal
2017-06-15 13:28
232 查看
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 block e.printStackTrace(); } } } } public class Task implements Runnable{ private ThreadId id = new ThreadId(); @Override public void run() { // TODO Auto-generated method stub System.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 ID private 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()); } }
相关文章推荐
- C++主题年技巧积累#1——UltraEdit的代码美化
- 初学C++编写的代码积累
- C++主题年技巧积累#1——UltraEdit的代码美化
- C++主题年技巧积累#1——UltraEdit的代码美化
- C++主题年技巧积累#1——UltraEdit的代码美化
- C++主题年技巧积累#1——UltraEdit的代码美化
- web开发的珍藏代码积累
- C++主题年技巧积累#1——UltraEdit的代码美化
- C++主题年技巧积累#1——UltraEdit的代码美化
- 今天开始,点滴积累,开始我的代码人生!
- C++主题年技巧积累#1——UltraEdit的代码美化
- C++主题年技巧积累#1——UltraEdit的代码美化
- C++主题年技巧积累#1——UltraEdit的代码美化
- C++主题年技巧积累#1——UltraEdit的代码美化
- 初涉VB.NET入门级代码积累
- C++主题年技巧积累#1——UltraEdit的代码美化
- C++主题年技巧积累#1——UltraEdit的代码美化
- C++主题年技巧积累#1——UltraEdit的代码美化
- C++主题年技巧积累#1——UltraEdit的代码美化
- 字符串操作类 NET代码积累之一