防止任务在共享资源上产生冲突除了加锁的第二种方式是 [color=red]根除对变量的共享[/color]。线程本地存储是一种自动化机制,可以为使用相同变量的每个不同线程都创建不懂的存储。
public class ThreadLocalVariableHolder {
private static ThreadLocal<Integer> value = new ThreadLocal<Integer>() {
private Random rand = new Random(47);
protected synchronized Integer initialValue() {
return rand.nextInt(10000);
}
};
public static void increment() {
value.set(value.get() + 1);
}
public static int get() {
return value.get();
}
public static void main(String[] args) throws Exception {
ExecutorService exec = Executors.newCachedThreadPool();
for (int i = 0; i < 5; i++) {
exec.execute(new Accessor(i));
}
TimeUnit.SECONDS.sleep(1);
exec.shutdownNow();
}
}
class Accessor implements Runnable {
private final int id;
public Accessor(int idn) {
this.id = idn;
}
public void run() {
while (!Thread.currentThread().isInterrupted()) {
ThreadLocalVariableHolder.increment();
System.out.println(this);
Thread.yield();
}
}
public String toString() {
return "#" + id + ":" + ThreadLocalVariableHolder.get();
}
}
753

被折叠的 条评论
为什么被折叠?



