首页 > 代码库 > ThreadLocal的简单使用(读书笔记)
ThreadLocal的简单使用(读书笔记)
从ThreadLocal的名字上可以看到,这是一个线程局部变量,也就是说,只有当前线程可以访问,既然是只有当前线程可以访问的数据,自然是线程安全的.
public class ThreadLocalDemo { private static ThreadLocal<SimpleDateFormat> t1 = new ThreadLocal<>(); public static class ParseDate implements Runnable { int i = 0; public ParseDate(int i) { this.i = i; } /** * When an object implementing interface <code>Runnable</code> is used * to create a thread, starting the thread causes the object‘s * <code>run</code> method to be called in that separately executing * thread. * <p> * The general contract of the method <code>run</code> is that it may * take any action whatsoever. * * @see Thread#run() */ @Override public void run() { try { if (t1.get() == null) t1.set(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); Date t = t1.get().parse("2015-03-29 19:29:" + i % 60); System.out.println(i + ":" + t); } catch (ParseException e) { e.printStackTrace(); } } } public static void main(String[] args) { ExecutorService es = Executors.newFixedThreadPool(10); for (int i = 0; i < 1000; i++) { es.execute(new ParseDate(i)); } } }
从这里也可以看到,为每一个线程人手分配一个对象工作并不是有ThreadLocal来完成的.而是需要在应用层面保证的,如果在应用上为每一个线程分配了相同的对象实例,那么ThreadLocal也不能保证线程安全,
ThreadLocal的简单使用(读书笔记)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。