Java在线程内共享数据:
public class ThreadLocalTest {
public static void main(String[] args){
for (int i = 0; i < 5; i++) {
new Thread(new Runnable(){
public void run(){
new Test().get();
new Test().get();
new Test().get();
}
}).start();
}
}
}
class Test{
public void get(){
Session session = SessionFactory.getSession();
String s = session.get();
System.out.println(s);
}
}
//session工厂用于提供共享数据
class SessionFactory {
private static final ThreadLocal<Session> x = new ThreadLocal<Session>();
public static Session getSession(){
Session session=x.get();
if (session==null){
session=Session.Build();
x.set(session);
}
return session;
}
}
class Session {
private String message;
private Session(String message) {
this.message = message;
}
public static Session Build(){
Random random=new Random();
String message=" Session from "+ Thread.currentThread().getName()+":"+random.nextInt();
return new Session(message);
}
public String get(){
return message;
}
}
结果:
Session from Thread-1:438187337
Session from Thread-1:438187337
Session from Thread-1:438187337
Session from Thread-3:-2097811419
Session from Thread-3:-2097811419
Session from Thread-3:-2097811419
Session from Thread-4:517088073
Session from Thread-4:517088073
Session from Thread-4:517088073
Session from Thread-2:1768673450
Session from Thread-2:1768673450
Session from Thread-2:1768673450
Session from Thread-0:-239980551
Session from Thread-0:-239980551
Session from Thread-0:-239980551