创建一个独立的线程:
<!---->1
public
class
AnotherThread
implements
Runnable{
2
public
void
run(){
3
4
TestThreadLocal ttl
=
new
TestThreadLocal();
5
int
number1
=
ttl.get();
6
7
System.out.println(
"
another number1 is
"
+
number1);
8
}
9
}
ThreadLocal的测试类:
<!----> 1
public
class
TestThreadLocal {
2
3
//
The next serial number to be assigned
4
private
static
int
nextSerialNum
=
0
;
5
6
private
static
ThreadLocal serialNum
=
new
ThreadLocal() {
7
protected
synchronized
Object initialValue() {
8
return
new
Integer(nextSerialNum
++
);
9
}
10
};
11
12
public
static
int
get() {
13
return
((Integer) (serialNum.get())).intValue();
14
}
15
16
public
static
void
main(String[] args) {
17
TestThreadLocal ttl
=
new
TestThreadLocal();
18
int
number1
=
ttl.get();
19
20
System.out.println(
"
number1 is
"
+
number1);
21
22
int
number2
=
ttl.get();
23
24
System.out.println(
"
number2 is
"
+
number2);
25
26
new
Thread(
new
AnotherThread()).start();
27
new
Thread(
new
AnotherThread()).start();
28
}
29
}
30
输出结果为:
number1 is 0
number2 is 0
another number1 is 1
another number1 is 2
由此可见,对于同一个线程,都维护一个自己的局部变量。这在并发环境中可以很好的防止线程间共享资源的冲突。ThreadLocal
实例通常是类中的私有静态字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。
Hibernate中对session的管理有这样一个应用ThreadLocal的实例:
http://www.hibernate.org/207.html
分享到:
相关推荐
线程局部变量(ThreadLocal)是Java编程语言中一个非常重要的特性,主要用于在多线程环境中为每个线程提供独立的变量副本。标题"threadlocalpool:演示池环境中的线程局部变量"暗示我们将探讨如何在池化的线程环境中...
为了解决这个问题,我们可以使用线程局部变量(ThreadLocal)或者通过同步机制如synchronized关键字来实现线程间的数据隔离。 1. **线程内的数据共享与对象独立**: 在例子中,使用了HashMap来存储每个线程的数据...
2. **内存管理**:为了解决`ThreadLocal`可能导致的内存泄漏问题,实验实现可能引入了更智能的垃圾回收机制,比如弱引用或删除策略,确保不再使用的线程局部变量能够被及时释放。 3. **性能优化**:可能通过减少...
- **线程栈**:每个线程都有自己的独立栈空间,用于存储线程局部变量和方法调用信息。 - **线程变量**:使用`ThreadLocal`类可以为每个线程提供独立的变量副本,解决多线程之间的数据安全问题。 - **示例代码**: `...
聊天系统中,每个用户的状态信息可以存储在线程局部变量中,保证线程安全。 7. **异常处理** 多线程环境下,异常处理也非常重要。每个线程都应该有适当的try-catch-finally结构,以确保即使在异常发生时也能正确...
为避免这个问题,控制器内部不应包含可变状态,或者可以使用 ThreadLocal 变量来处理线程局部变量。 SpringMVC 与 Struts2 的主要区别: 1)入口点不同:SpringMVC 通过 DispatcherServlet,而 Struts2 使用 Filter...
解决方案是避免在控制器中定义实例变量,或者使用ThreadLocal来确保线程局部变量的安全。 6. **SpringMVC与Struts2的区别** - 入口不同:SpringMVC由Servlet(前端控制器)处理,Struts2由Filter(过滤器)处理。 ...
ThreadLocal则是Java中的一个线程局部变量,用于解决多线程环境下的数据隔离问题。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。AJAX...
15. **ThreadLocal**: 提供线程局部变量,每个线程都有自己的副本,互不影响。 16. **UUID**: 生成全局唯一标识符(UUID),常用于数据库主键生成。 17. **ArrayList and Vector**: 都是基于动态数组的列表实现,`...