多线程与高并发(4)

避免并发两种方式

  1. 不可变对象
  2. 线程封闭

    线程封闭: 把对象封装到一个线程里,只有这一个线程可以看到这个对象,即使这个对象不是线程安全也不会出现任何线程安全问题,因为只在一个线程里

    1. 堆栈封闭局部变量,无并发问题。栈封闭是我们编程当中遇到的最多的线程封闭。什么是栈封闭呢?简单的说就是局部变量。多个线程访问一个方法,此方法中的局部变量都会被拷贝一分儿到线程栈中。所以局部变量是不被多个线程所共享的,也就不会出现并发问题。所以能用局部变量就别用全局的变量,全局变量容易引起并发问题。
    2. ThreadLocal线程封闭:比较推荐的线程封闭方式。
      【ThreadLocal结合filter完成数据保存到ThreadLocal里,线程隔离。】通过filter获取到数据,放入ThreadLocal, 当前线程处理完之后interceptor将当前线程中的信息移除。使用ThreadLocal是实现线程封闭的最好方法。ThreadLocal内部维护了一个Map,Map的key是每个线程的名称,而Map的值就是我们要封闭的对象。每个线程中的对象都对应着Map中一个值,也就是ThreadLocal利用Map实现了对象的线程封闭
posted @ 2021-10-27 11:17  鹏了个鹏鹏  阅读(20)  评论(0)    收藏  举报