zoukankan      html  css  js  c++  java
  • java之struts2的ThreadLocal和ActionContext

    在之前的学习中,我们知道struts2可以将表单中的数据自动设置到处理类的属性上,还有类型转换等其他功能。那么struts2是怎样做这件事情的呢?

    struts2完成这些功能是通过拦截器来完成的,并且在这个过程中数据进行迁移的动作,数据从request对象中迁移到了处理类上。完成数据迁移是由ActionContext来完成的。

    1.先学习下ThreadLocal

    这个类提供了线程局部(thread-local)变量,ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。

    public class ThreadLocalTest {
        public static void main(String[] args) throws InterruptedException {
            //ThreadLocal是一个容器
            final ThreadLocal<Integer> tl = new ThreadLocal<>();
            //设置值
            tl.set(20);
            new Thread(new Runnable() {
                
                @Override
                public void run() {
                    tl.set(50);
                    System.out.println(Thread.currentThread().getName()+"===="+tl.get());
                }
            }).start();
            Thread.sleep(1000);
            System.out.println(Thread.currentThread().getName()+"======"+tl.get());
        }
    }

    执行结果:

    通过以上案例可以知道,ThreadLocal中存放的数据是线程安全的。ThreadLocal是一种典型以空间换时间的办法来做到线程安全。

    2.ActionContext是Action处理类执行的上下文对象

    ActionContext是一个Map结构的对象,属于一个容器。ActionContext是线程安全的。并且ActionContext在struts2执行过程中负责数据的存储。

    ActionContext机制是将ServletAPI中的数据进行了解耦,在Action执行过程中,struts2都从ActionContext中获取数据。那么实现线程安全,同时也降低了执行效率。

    ActionContext对象中的重要的对象

    另外,ThreadLocal的不错参考网址:

    https://www.cnblogs.com/dolphin0520/p/3920407.html

  • 相关阅读:
    『ORACLE』 DBLINK(11g)
    『ORACLE』 对永久表空间进行DDL操作(11g)
    『ORACLE』 对永久表空间进行DML操作(11g)
    『ORACLE』 数据库suspend模式(11g)
    『ORACLE』 数据库quiesce模式(11g)
    『ORACLE』 数据库restricted模式(11g)
    [转]为什么不去读顶级会议上的论文
    learn from 德国老师
    IDA 调试 Android
    L#中 int.TryParse 有问题
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/10970837.html
Copyright © 2011-2022 走看看