Java并发编程:深入剖析ThreadLocal
ThreadLocal类可以理解为ThreadLocalVariable(线程局部变量),提供了get与set等访问接口或方法,这些方法为每个使用该变量的线程都存有一份独立的副本,因此get总是返回当前执行线程在调用set时设置的最新值。可以将ThreadLocal
概括起来说,对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。前者仅提供一份变量,让不同的'线程排队访问,而后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响。
模拟ThreadLocal
复制代码 代码如下:
import ections;
import Map;
import ;
public class SimpleThreadLocal
private Map
hronizedMap(new HashMap
public void set(T newValue) {
(entThread(), newValue); // ①键为线程对象,值为本线程的变量副本
}
public T get() {
Thread currentThread = entThread();
T o = (currentThread); // ②返回本线程对应的变量
if (o == null && !ainsKey(currentThread)) { // ③如果在Map中不存在,放到Map中保存起来。
o = initialValue();
(currentThread, o);
}
return o;
}
public void remove() {
ve(entThread());
}
protected T initialValue() {
return null;
}
}
实用ThreadLocal
复制代码 代码如下:
class Count {
private SimpleThreadLocal
@Override
protected Integer initialValue() {
return 0;
}
};
public Integer increase() {
(() + 1);
return ();
}
}
class TestThread implements Runnable {
private Count count;
public TestThread(Count count) {
t = count;
}
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 1; i <= 3; i++) {
tln(entThread()ame() + "t" + i
+ "tht" + ease());
}
}
}
public class TestThreadLocal {
public static void main(String[] args) {
Count count = new Count();
Thread t1 = new Thread(new TestThread(count));
Thread t2 = new Thread(new TestThread(count));
Thread t3 = new Thread(new TestThread(count));
Thread t4 = new Thread(new TestThread(count));
t();
t();
t();
t();
}
}
输出
复制代码 代码如下:
Thread-0 1th 1
Thread-0 2th 2
Thread-0 3th 3
Thread-3 1th 1
Thread-1 1th 1
Thread-1 2th 2
Thread-2 1th 1
Thread-1 3th 3
Thread-3 2th 2
Thread-3 3th 3
Thread-2 2th 2
Thread-2 3th 3
-
java的应用范围
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。自从sun公司推出java语言以来,java极大受到开发者和企业的欢迎,在互联网如此发达的今天,java语言得到了广泛的应用,比如网站,游戏,电子商务等,java语言在这些领域开发占很大的比例。在全球云计算和移动互...
-
Java语法基础for语句练习
本文是本站小编搜索整理的关于Java语法基础for语句练习,供参考学习,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网!控制语句——for练习语句的嵌套应用累加求和,计数器循环嵌套一、语句的嵌套应用语句嵌套形式。其实就是语句中...
-
java环境变量设置path
导语:java的环境变量是怎么设置的呢?以下小编为大家介绍java环境变量设置path文章,仅供参考!java环境变量设置path环境变量是一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如path,当要求系统运行一个程序而没有告诉它程序所在的完整路...
-
java设计模式:工厂模式
导语:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。下面我们来看看工厂模式,希望对大家有所帮助。工厂设计模式★场景和问题面向接口编程是java编程中的大家所...
相关文章
- 如何理解Javascript的caller,callee,call,apply区别
- 如何理解Javascript的caller,callee,call,apply区别
- Java ClassLoader原理深入讲解
- A Lifeguard at Johns Beach Saved a Drowning Child,A Lifeguar英语作文
- 如何理解Javascript的caller,callee,call,apply区别
- 如何理解Javascript的caller,callee,call,apply区别
- 如何理解Javascript的caller,callee,call,apply区别
- 如何理解Javascript的caller,callee,call,apply区别
- 如何理解Javascript的caller,callee,call,apply区别
- 简单地分析Java线程编程中ThreadLocal类的使用