简述:
ThreadLocal, 每个线程独立维护的局部变量
代码:
ThreadLocalDemo.java
package com.anialy.test.concurrency.threadlocal;
import java.util.UUID;
public class ThreadLocalDemo implements Runnable {
// 线程共享的对象
private static final ThreadLocal<User> threadLocal = new ThreadLocal<User>();
public void run() {
instantiateUser();
printUserInThreadLocal();
}
private void printUserInThreadLocal() {
User user = (User)threadLocal.get();
if(user != null)
System.out.printf("User %s\n", user.userId);
}
private void instantiateUser() {
User user = (User)threadLocal.get();
if(user == null){
user = new User();
threadLocal.set(user);
}
}
public class User {
String userId;
public User(){
userId = UUID.randomUUID().toString();
}
}
}
测试:
Test.java
package com.anialy.test.concurrency.threadlocal;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Test {
public static void main(String[] args) {
final int threadSize = 10;
ExecutorService execService = Executors.newFixedThreadPool(threadSize);
for(int i=0; i<threadSize; i++)
execService.execute(new ThreadLocalDemo());
}
}
输出: