版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
public class Demo_ThreadLocal {
private ThreadLocal<Integer> count = new ThreadLocal<Integer>() {//注意这里一定要指定泛型类型,此语法是匿名子类
@Override
protected Integer initialValue() {
return new Integer(0);
}
};
public int getNext() {
Integer value = count.get();
value++;
count.set(value);
return value;
}
public static void main(String[] args) {
Demo_ThreadLocal d = new Demo_ThreadLocal();
/**
* 线程1创建以及启动
*/
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
System.out.println("我是线程1" + Thread.currentThread().getName() + " " + d.getNext());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
/**
* 线程2创建以及启动
*/
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
System.out.println("我是线程2" + Thread.currentThread().getName() + " " + d.getNext());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
/**
* 线程3创建以及启动
*/
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
System.out.println("我是线程3" + Thread.currentThread().getName() + " " +
" " + d.getNext());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
控制台的输出(由于每个线程的执行任务都是用while(true)来修饰的,所以只能也只需截取一部分):
我是线程1Thread-0 1 我是线程2Thread-1 1 我是线程3Thread-2 1 我是线程1Thread-0 2 我是线程2Thread-1 2 我是线程1Thread-0 3 我是线程1Thread-0 4 我是线程3Thread-2 2 我是线程2Thread-1 3 我是线程1Thread-0 5
分析:
public T get() { Thread t = Thread.currentThread();.......