zoukankan      html  css  js  c++  java
  • 39 多线程(十一)——ThreadLocal

    目前阶段,我只能知其然,不能做到知其所以然,这里引用一篇其所以然的文章,为以后理解ThreadLocal做准备: https://www.cnblogs.com/ldq2016/p/9041856.html

    我把它大概理解为:一个线程模型,这个模型下的线程都共享这个模型下的一个泛型引用变量,但各线程各自的变量值是不同的,因为各线程各自的变量只是模型下的那个变量的副本。

    ThreadLocal搭建要点:

    1. ThreadLocal要作为一个public static 的公共属性被声明和初始化在类中,(声明和初始化有三种方法)
    2. 该类中需要写一个内部类线程类(实现Runnable或继承Thread)

    Demo:

    package _20191209;
    
    public class ThreadLocalTest {
    	//创建本地线程区域
    	//private static ThreadLocal<Integer> threadLocal = new ThreadLocal<>();
    	//创建并初始化线程局部变量
    //	private static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>() {
    //		protected Integer initialValue() {
    //			return 200;//值的类型是泛型指定的类型
    //		}
    //	};
    	//以上两步甚至还可以简化为lamda形式
    	private static ThreadLocal<Integer> threadLocal = ThreadLocal.withInitial(()->200);
    	public static void main(String[] args) {
    		System.out.println(Thread.currentThread().getName()+"-->预设值:"+threadLocal.get());
    		//虽然两个线程都是使用同一个threadLocal,但它们内部各自的值是不相同的(运行输出查看)
    		new Thread(new MyThread()).start();
    		new Thread(new MyThread()).start();
    	}
    	
    	//写一个内部类
    	public static class MyThread implements Runnable{
    		@Override
    		public void run() {
    			//虽然多个线程都是使用同一个threadLocal,但它们内部各自的值是不相同的(运行输出查看)
    			threadLocal.set((int)(Math.random()*99));
    			System.out.println(Thread.currentThread().getName()+"-->"+threadLocal.get());
    		}
    	}
    }
    

      

  • 相关阅读:
    Django笔记(2)Json字段处理
    jvm 启动参数设置(转载)
    消息中间件及WebSphere MQ入门(转载)
    Ubuntu下Tomcat绑定80端口(zz)
    idea+tomcat 端口占用
    内存溢出和内存泄漏的区别(ZZ)
    Ubuntu上搭建Hadoop环境(单机模式+伪分布模式) (转载)
    ubuntu 安装jdk7小结(转载)
    ubuntu下安装maven(转载)
    CXF wsdl2java (转载)
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/12010332.html
Copyright © 2011-2022 走看看