美文网首页
深入多线程4

深入多线程4

作者: 安安静静写代码 | 来源:发表于2017-08-21 20:40 被阅读3次

    线程局部变量
    线程局部变量也叫线程局部存储,ThreadLocal类给每个线程都添加了一个变量,专门来存储每一个线程自己的数据
    常用函数

    QQ截图20170821180548.png

    set() : 想要存储的数据,调用set进行设置ThreadLocalMap
    给当前线程存储数据,key 是当前线程 value 是set进的数据
    get(): 获得 当前线程存储的数据(没有参数,其实内部是获取当前线程作为key找到存储在ThreadLocalMap中的值)
    应用场景: 数据库链接 Session(会话)

    package com.qf.demo5;
    public class Test {
    
        public static void main(String[] args) {
            Resouce resouce = new Resouce();
            
            Thread thread = new Thread(resouce,"张三");
            Thread thread2 = new Thread(resouce,"李四");
            Thread thread3 = new Thread(resouce,"王五");
            Thread thread4 = new Thread(resouce,"赵六");
            Thread thread5 = new Thread(resouce,"田七");
            
            thread.start();
            thread2.start();
            thread3.start();
            thread4.start();
            thread5.start();
        }
    }
    /**
     * 1  并发修改异常 (list集合 是线程不安全的 )
     * 2  
     * 
     * 想要  每一个线程  都可以 单独的存储一个自己的数据
     * 
     * @author Administrator
     *
     */
    class Resouce implements Runnable{
        ThreadLocal<String> local = new ThreadLocal<String>(){
            @Override
            protected String initialValue() {// 设置  local里面的初始值, 即使 没有set 调用get 返回的也不是null返回的是  "很好"
                return "很好";// 返回的   线程中在线程局部变量中存储的默认值
            }
        };
        @Override
        public void run() {
            String string = Thread.currentThread().getName()+ (int)(Math.random()*100);
            local.set(string);// 如果没有set 那get 得到就是初始值
            System.out.println(string);
            
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                
                e.printStackTrace();
            }
            local.remove();// remove 将 线程中 在线程局部变量中存储的数据移除,线程局部变量中 存在默认值
            String data  = local.get();// 不需要参数就可以得到当前线程的值 , 如果set过,得到就是set的值,如果没有set过 得到就是 初始值
            System.out.println(data);
        
        }
    }
    

    相关文章

      网友评论

          本文标题:深入多线程4

          本文链接:https://www.haomeiwen.com/subject/qzrhdxtx.html