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

本文介绍了一个Java示例程序,演示了如何利用ThreadLocal实现在多线程环境中为每个线程提供独立的副本数据,避免了线程间的数据共享问题。通过创建一个Session类并使用SessionFactory来获取Session实例,确保了每个线程拥有自己的Session对象。

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



