ThreadLocal 实例
来源:互联网 发布:iphone7屏幕录制软件 编辑:程序博客网 时间:2024/06/05 19:34
java.lang
Class ThreadLocal<T>
java.lang.Object java.lang.ThreadLocal<T>
- Direct Known Subclasses:
- InheritableThreadLocal
public class ThreadLocal<T>
- extends Object
This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its get or set method) has its own, independently initialized copy of the variable. ThreadLocal instances are typically private static fields in classes that wish to associate state with a thread (e.g., a user ID or Transaction ID).
For example, the class below generates unique identifiers local to each thread. A thread's id is assigned the first time it invokesUniqueThreadIdGenerator.getCurrentThreadId() and remains unchanged on subsequent calls.
import java.util.concurrent.atomic.AtomicInteger; public class UniqueThreadIdGenerator { private static final AtomicInteger uniqueId = new AtomicInteger(0); private static final ThreadLocal < Integer > uniqueNum = new ThreadLocal < Integer > () { @Override protected Integer initialValue() { return uniqueId.getAndIncrement(); } }; public static int getCurrentThreadId() { return uniqueId.get(); } } // UniqueThreadIdGenerator
Each thread holds an implicit reference to its copy of a thread-local variable as long as the thread is alive and the ThreadLocal instance is accessible; after a thread goes away, all of its copies of thread-local instances are subject to garbage collection (unless other references to these copies exist).
public static int getCurrentThreadId() { return uniqueId.get(); }应该是uniqueNum.get();
给出一个全面的例子:
package org.ouc.michael.test;import java.util.concurrent.atomic.AtomicInteger;public class ThreadLocalTest implements Runnable{private static final AtomicInteger uniqueId =new AtomicInteger(0);private static final ThreadLocal <Integer> uniqueNum=new ThreadLocal <Integer> (){@Override protected Integer initialValue(){return uniqueId.getAndIncrement();}};public static int getCurrentThreadId(){return uniqueNum.get();}@Overridepublic void run() {for (int i = 0; i < 100; i++) {int id=ThreadLocalTest.getCurrentThreadId();System.out.println("Thread:"+getCurrentThreadId());try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public static void main(String[] args) {// TODO Auto-generated method stubThreadLocalTest th1=new ThreadLocalTest();ThreadLocalTest th2=new ThreadLocalTest();ThreadLocalTest th3=new ThreadLocalTest();ThreadLocalTest th4=new ThreadLocalTest();ThreadLocalTest th5=new ThreadLocalTest();Thread run1=new Thread(th1);run1.start();Thread run2=new Thread(th1);run2.start();Thread run3=new Thread(th1);run3.start();Thread run4=new Thread(th1);run4.start();Thread run5=new Thread(th1);run5.start();}}
- ThreadLocal实例
- ThreadLocal 实例
- ThreadLocal实例
- JDK ThreadLocal实例
- JDK ThreadLocal实例
- ThreadLocal实例说明
- 一个ThreadLocal实例
- ThreadLocal使用实例
- ThreadLocal使用实例
- ThreadLocal实例2
- ThreadLocal使用实例
- ThreadLocal类讲解及实例
- ThreadLocal类讲解及实例
- ThreadLocal实现线程单实例
- ThreadLocal优化共享对象实例
- Handler,Looper,MessageQueue,ThreadLocal讲解以及实例
- ThreadLocal 内存泄露的实例分析
- ThreadLocal
- apache solr 安装
- 线程的终止与回收
- hdu 1082 Matrix Chain Multiplication--表达式求值
- 宣告式动画
- Linux内核编译简略步骤
- ThreadLocal 实例
- Linux系统初体验,U盘启动盘制作失败。
- 图像处理(3)_灰度分布均衡化
- Java 第一节课 总结
- Flex手机项目继承IconItemRenderer自定义List组件
- 第二章 Java语言基础
- 警惕十种职业性肺病
- linux设备驱动是什么?
- jQuery插件之日历插件