本篇内容主要讲解“怎么实现java线程封闭”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么实现java线程封闭”吧!
多线程访问共享可变数据时,并不是所有的时候,都要用到共享数据, 所以线程封闭的概念就提了出来。 所谓线程封闭, 就是指数据都封闭在各自的线程之中, 不需要不需要同步。线程封闭的具体的实现主要有ThreadLocal和局部变量
ThreadLocal是Java里一种特殊的变量,一个线程级别的变量,每个线程都有一个自己独立的ThreadLocal变量。它的竞争条件被彻底消除, 在并发模式下是绝对安全的。 用法:ThreadLocal<T> var = new ThreadLocal<T>();
会自动在每个线程上创建一个T的副本, 副本之间彼此独立,互不影响。 可以用ThreadLocal存储一些参数,以便在线程中多个方法中使用, 用来代替方法传参的的做法
代码示例:
/** 线程封闭示例 */ public class Demo6 { /** threadLocal变量,每个线程都有一个副本,互不干扰 */ public static ThreadLocal<String> value = new ThreadLocal<>(); /** * threadlocal测试 * * @throws Exception */ public void threadLocalTest() throws Exception { // threadlocal线程封闭示例 value.set("这是主线程设置的123"); // 主线程设置值 String v = value.get(); System.out.println("线程1执行之前,主线程取到的值:" + v); new Thread( new Runnable() { @Override public void run() { String v = value.get(); System.out.println("线程1取到的值:" + v); // 设置 threadLocal value.set("这是线程1设置的456"); v = value.get(); System.out.println("重新设置之后,线程1取到的值:" + v); System.out.println("线程1执行结束"); } }) .start(); Thread.sleep(5000L); // 等待所有线程执行结束 v = value.get(); System.out.println("线程1执行之后,主线程取到的值:" + v); } public static void main(String[] args) throws Exception { new Demo6().threadLocalTest(); } }
输出结果:
线程1执行之前,主线程取到的值:这是主线程设置的123 线程1取到的值:null 重新设置之后,线程1取到的值:这是线程1设置的456 线程1执行结束 线程1执行之后,主线程取到的值:这是主线程设置的123
局部变量的固有属性之一就是封闭在线程中 它们位于执行线程的栈中, 其他线程无法访问这个栈
到此,相信大家对“怎么实现java线程封闭”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。