java---线程内数据共享

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


猜你喜欢

转载自blog.csdn.net/xuejike/article/details/18410537