62,614
社区成员
发帖
与我相关
我的任务
分享
/*
* file: ThreadLocalDemo.java
* class: ThreadLocalDemo
*
* description:
*
* @author: leisore
* @version: V1.0.0
*/
package cn.leisore.daily._2011_06_20;
import java.lang.reflect.Array;
import java.util.Set;
import java.util.TreeSet;
// ID counter, per id per thread
class ID {
// private static final ThreadLocal<Integer> threadLocal = new
// ThreadLocal<Integer>() {// 1
private final ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>() {
int initId = 0;
@Override
protected Integer initialValue() {
return initId = initId + 1;
}
};
public ID() {
// private ID() {
}
// public static final int id() {//1
public final int id() {
return threadLocal.get();
}
}
public class ThreadLocalDemo {
public static void main(String[] args) {
final ID id = new ID();
final Thread[] threadArr = new Thread[10];
@SuppressWarnings("unchecked")
final Set<Integer>[] threadIdSetArr = (Set<Integer>[]) Array
.newInstance(Set.class, threadArr.length);
for (int i = 0, j = threadArr.length; i < j; i++) {
final int threadIndex = i;
threadIdSetArr[threadIndex] = new TreeSet<Integer>();
threadArr[i] = new Thread(String.valueOf(threadIndex)) {
int myIndex = threadIndex;
@Override
public void run() {
for (int k = 0; k < 100; k++) {
threadIdSetArr[myIndex].add(id.id());
}
}
};
}
// start
for (Thread t : threadArr) {
t.start();
}
// wait until all were done
for (Thread t : threadArr) {
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 0, j = threadIdSetArr.length; i < j; i++) {
System.out.println(String.format("Thread %d: %s", i,
threadIdSetArr[i].toString()));
}
}
}
输出:
/*
Thread 0: [1]
Thread 1: [6]
Thread 2: [2]
Thread 3: [7]
Thread 4: [3]
Thread 5: [8]
Thread 6: [4]
Thread 7: [9]
Thread 8: [5]
Thread 9: [10]
*/