• 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也不能保证线程安全,
  • 相关阅读:
    SQL执行效率1
    php经典算法(转载)
    linux自用命令
    vim基本命令
    xampp安装
    BUU-rsa
    z3约束器学习笔记
    面试前夕oi挣扎式复习
    bss上的格式化字符串漏洞
    一、汇编
  • 原文地址:https://www.cnblogs.com/ten951/p/6212338.html
Copyright © 2020-2023  润新知