zoukankan      html  css  js  c++  java
  • 线程---ThreadLocal

    ThreadLocal

    就是一个Map

    key就是 Thread.getCurrentThread().

    value就是线程需要保存的变量

     

    ThreadLocal.set(value) 相当于 map.put(Thread.getCurrentThread(),value)

    ThreadLocal.get() 相当于map.get(Thread.getCurrentThread());

    内存问题:在并发量高的时候,可能有内存溢出。

    使用Threadlocal的时候注意回收资源,每个线程结束前,将当前线程保存的线程变量一定删除 ThreadLocal.remove();否则容易引起内存泄露。

    只有当所有的线程都被回收时,ThreadLocal才被回收。

    在一个操作系统中,线程和进程是有数量限制的,在操作系统中,确定线程和进程唯一性 的唯一条件就是线程或进程 的ID。

    操作系统在回收线程或进程的时候,不是一定杀死线程或进程,在繁忙的时候,只会做清空线程或进程栈数据的操作,重复使用线程或进程。

    ThreadLocal对象是放在堆内存中,是所有线程共享的。回收线程的同时,ThreadLocal可能并没有被回收,这时如果没有清除ThreadLocal的数据,而新创建的线程的Id又与之前存储过数据的线程的ID相同的话,就会取到之前线程的数据。

  • 相关阅读:
    PHP数字补零的两种方法
    php 防跨站表单提交
    PHP字符串压缩
    原生JS实现表单序列化serialize()
    java并发实现原子操作
    Effective java -- 9 并发/序列化
    Effective java -- 8 异常
    Effective java -- 7 通用程序设计
    Effective java -- 6 方法
    Effective java -- 5 枚举和注解
  • 原文地址:https://www.cnblogs.com/hg1205/p/12653678.html
Copyright © 2011-2022 走看看