ThreadLocal类的简单使用

1.概述变量值的共享可以使用public 是static 变量的形式,所有的线程都使用同一个public static 变量。 如实现线程内的共享变量,jdk提供了ThreadLocal来解决这个问题。

ThreadLocal主要解决就是每个线程绑定自己的值,可以将ThreadLocal类看成全局存放数据的盒子。2.基本使用

基本demo演示(存取值)

/** * @author 上海尚学堂 shsxt.com * 了解更多 加V:java8733 */public class ThreadLocalDemo01 {        public static ThreadLocal t1 = new ThreadLocal();        public static void main(String[] args) {                if (t1.get() == null) {            System.out.println("从未放过值");            t1.set("存放的值");        }                System.out.println(t1.get());        System.out.println(t1.get());            }}

  

结果示例:从未放过值存放的值存放的值

结果分析:从第一次调用t1.get()方法时候,返会的null.然后通过set() 方法赋值后顺利取出值。类ThreadLocal解决的是变量在不同线程间的隔离性。也就是不同线程拥有自己的值。不同线程中的值是可以放入ThreadLocal类中进行保存。

3.隔离性验证线程变量的隔离性:

package com.threadlocal;/** * 验证隔离性 * @author 上海尚学堂 shsxt.com * */public class ThreadLocalDemo02 {    public static ThreadLocal demo = new ThreadLocal();    public static void main(String[] args) {        ThreadA a = new ThreadA();        a.start();        ThreadB b = new ThreadB();        b.start();        try {            for (int i = 0; i < 100; i++) {                demo.set("Main .." + (i + 1));                System.out.println("Main  getValue ..." + demo.get());                Thread.sleep(200);            }        } catch (InterruptedException e) {            e.printStackTrace();        }    }}class ThreadA extends Thread {    @Override    public void run() {        try {            for (int i = 0; i < 100; i++) {                ThreadLocalDemo02.demo.set("ThreadA" + (i + 1));                System.out.println("ThreadA getValue " + ThreadLocalDemo02.demo.get());                Thread.sleep(200);            }        } catch (InterruptedException e) {            e.printStackTrace();        }        super.run();    }}class ThreadB extends Thread {    @Override    public void run() {        try {            for (int i = 0; i < 100; i++) {                ThreadLocalDemo02.demo.set("ThreadA" + (i + 1));                System.out.println("ThreadA getValue " + ThreadLocalDemo02.demo.get());                Thread.sleep(200);            }        } catch (InterruptedException e) {            e.printStackTrace();        }        super.run();    }}

  

执行结果

小结:从上面执行的结果可以看的出来,每一个线程向ThreadLocal 中存值时,但是每个线程取出的都是自己线程的值。这也就验证的线程变量的隔离性。上海尚学堂Java教研组原创,转载请注明出处!感谢阅读上海尚学堂Java技术文章。请多关注收藏!

于是渐渐开始有些伤怀。

ThreadLocal类的简单使用

相关文章:

你感兴趣的文章:

标签云: