ThreadLocal实现线程范围内共享变量
2020-11-18 18:21
标签:com http class blog style div img code java javascript tar 在web应用中,一个请求(带有请求参数)就是一个线程,那么如何区分哪些参数属于哪个线程呢?比如struts中,A用户登录,B用户也登录,那么在Action中怎么区分哪个是A用户的数据,哪个是B用户的数据。这就涉及到ThreadLocal类了,将变量与当前线程绑定。比如struts中,有一个容器类,那么A用户将数据放在A的容器中,B用户将数据放在B的容器中,然后再将容器与线程绑定,这样的话,A请求的线程处理A容器的数据,B请求的线程处理B容器的数据,而不会混淆。 示例如下: 输出结果: ThreadLocal实现线程范围内共享变量,搜素材,soscw.com ThreadLocal实现线程范围内共享变量 标签:com http class blog style div img code java javascript tar 原文地址:http://www.cnblogs.com/myCodingSky/p/3698288.html 1 package ch03;
2
3 import java.util.Random;
4
5 public class ThreadLocalTest {
6
7 public static void main(String[] args) {
8 Thread th = null;
9 for(int i=0; i){
10 th = new Thread(new Runnable() {
11 @Override
12 public void run() {
13 int data = new Random().nextInt();
14 System.out.println(Thread.currentThread().getName()+"\t"+data);
15 Request request = Request.getThreadInstance();
16 request.setName("name:"+data);
17 request.setAge(data);
18
19 //输出两个模块的值
20 new A().get();
21 new B().get();
22 }
23 });
24 th.start();
25 }
26 }
27
28 /*A模块*/
29 static class A{
30 public void get(){
31 Request request = Request.getThreadInstance();
32 System.out.println("A: "+Thread.currentThread().getName()+"\t"+
33 request.getName()+"\t"+request.getAge());
34 }
35 }
36 /*B模块*/
37 static class B{
38 public void get(){
39 Request request = Request.getThreadInstance();
40 System.out.println("B: "+Thread.currentThread().getName()+"\t"+
41 request.getName()+"\t"+request.getAge());
42 }
43 }
44
45 }
46
47 class Request{
48
49 private Request(){}
50
51 /*ThreadLocal:将变量与当前线程绑定,相当于Map
上一篇:JavaScript高级程序设计学习笔记--基本概念
下一篇:C# 多线程处理相关说明: WaitHandle,waitCallback, ThreadPool.QueueUserWorkItem