博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA并发编程7_线程封闭:ThreadLocal类
阅读量:5357 次
发布时间:2019-06-15

本文共 1619 字,大约阅读时间需要 5 分钟。

多线程访问共享数据时,通常需要同步,一种避免使用同步的方式就是不共享数据。如果仅在单线程里访问数据,那么就不需要使用同步,这种技术被称为线程封闭。

:维护线程封闭性的职责完全由程序实现来承担。

栈封闭:我的理解就是局部变量,局部变量是线程私有的,不会被共享,也就不存在竞争问题。因此能使用局部变量的地方就不要使用全局变量。

ThreadLocal类:一种维护线程封闭性更规范的方法。顾名思义就是创建一个线程局部变量。它会为使用相同变量的每个不同线程都创建不同存储。我的理解是在使用全局的变量(多线程均可能同时访问的变量)的前提下,多个线程同时去访问该变量,一般会出现线程不安全,而此时我们又不需要共享该变量,就可以使用ThreadLocal类来解决。

实际上,ThreadLocal根本就不是解决共享变量的问题,线程之间根本就不会共享变量,一定要注意ThreadLocal是用来隔离线程存储数据的。

public class Test implements Runnable{	private ThreadLocal
num = new ThreadLocal
(){ protected Integer initialValue() { return 100; }; }; @Override public void run() { while (!Thread.currentThread().isInterrupted()) { increment(); System.out.println(Thread.currentThread().getName() + " " + num.get()); Thread.yield(); } } private void increment() { num.set(num.get() + 1); } public static void main(String[] args) throws InterruptedException { Test test = new Test(); ExecutorService exec = Executors.newCachedThreadPool(); for (int i = 0; i < 5; i++) { exec.execute(test); } TimeUnit.MILLISECONDS.sleep(5); exec.shutdownNow(); }}
输出
pool-1-thread-2  101pool-1-thread-1  101pool-1-thread-4  101pool-1-thread-3  101pool-1-thread-5  101pool-1-thread-4  102pool-1-thread-1  102pool-1-thread-3  102pool-1-thread-2  102pool-1-thread-5  102pool-1-thread-1  103pool-1-thread-4  103pool-1-thread-3  103pool-1-thread-2  103pool-1-thread-5  103pool-1-thread-1  104pool-1-thread-4  104pool-1-thread-3  104pool-1-thread-2  104pool-1-thread-5  104…

程序运行时,很显然每个线程都被分配了自己的存储。如果不是使用ThreadLocal类,那这五个线程共享的是num变量,必然会产生线程不安全产生竞争。

转载于:https://www.cnblogs.com/qhyuan1992/p/5385296.html

你可能感兴趣的文章
ajax如何向后台传递数组,在后台该如何接收的问题(项目积累)
查看>>
Solr之java实现增删查操作
查看>>
httpClient连接工具类实测可用
查看>>
CDOJ 1965 连通域统计【DFS】
查看>>
飞机大战3-我的飞机
查看>>
c#接口
查看>>
MyEclipse部署Jboss出现java.lang.OutOfMemoryError: PermGen space
查看>>
ZOJ 1133
查看>>
HIVE和HADOOP的一些东西
查看>>
alibaba / zeus 安装 图解
查看>>
Selenium的自我总结2_元素基本操作
查看>>
git Please move or remove them before you can merge
查看>>
Flume_初识
查看>>
Visual studio C++ MFC之列表控件CListCtrl Control
查看>>
并不对劲的图论专题(三):SPFA算法的优化
查看>>
STM32 boot概述
查看>>
聚集索引和非聚集索引
查看>>
Python2.x与3.x版本区别
查看>>
sorting functions _ golang
查看>>
zentao(禅道)迁移
查看>>