ThreadLocal变量--解决变量安全问题的终极解决之道
package 多线程; class Runner implements Runnable { ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>(); @Override public void run() { for (int i = 1; i <= 10; i++) { if (threadLocal.get() == null) { threadLocal.set(new Integer(0)); } int x = (Integer) threadLocal.get(); x = x + i; threadLocal.set(x); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "\tsum=" + threadLocal.get()); } } }
?
?
把数据存储存储到threadLocal里
?
package 多线程;
public class ThreadLocalTest {
public static void main(String[] args) {
Runnable run = new Runner();
Thread ta = new Thread(run,"threadA");
Thread tb = new Thread(run,"threadB");
ta.start();
tb.start();
}
}
?调用之后,安全输出