Thread的context模式

public class MyContext
{
    private static final ThreadLocal<MySession> contextSession = new ThreadLocal<MySession>();
    private static final ThreadLocal<MyHttpRequest> contexRequest = new ThreadLocal<MyHttpRequest>();

    public static void putMySession(MySession session)
    {
        contextSession.set(session);
    }

    public static contextSession getMySession()
    {
        return contextSession.get();
    }

    public static void put(MyHttpRequest req)
    {
        context.set(req);
    }

    public static VantageSearchRequest get()
    {
        return contexRequest .get();
    }

    public static void clear()
    {

        contextSession .remove();
        contexRequest .remove();
    }
}

然后使用的时候根据thread 把值放到这里面,因为是static所以任何时候直接用
MyContext.get() MyContext.getMySession()就可以取到和这个thread绑定的值,用完药释放,这种模式可以当作当前线程运行的上下文使用,这个生命周期都可以取这些值,而且是线程安全的,每个线程单独保存自己的MySession对象,这是一种设计思路,很好,而且通过这种方式我可以把方法中的参数放到这里面,就可以不用把值都传到方法参数中,直接通过这个上下文取值,也有不好的地方就是生命周期是整个线程之中都不会释放,如果数据值很大还是算了吧
				
时间: 2024-10-06 20:46:34

Thread的context模式的相关文章

关于 &quot;Context&quot; 模式(基于COM思想IUnknown思想)

有同事很喜欢用Context模式,觉得是自己"首创", 我有些自己的想法, 或者大家可以发表下自己的观点. 什么是Context模式? 23种设计模式中没有这个模式, 是同事自己命名的, 我觉得名字也挺合理. Context模式首先要满足的条件是类都是基于COM思想IUnknown接口 继承于IUnknown有2个基本接口, 一个是IContext, 另外一个是IComponent IContext的作用是保存一个Map, 里面存有接口IID和接口指针的映射关系 IComponent的

[转载]state thread

原地址:http://www.d0evi1.com/?p=1396 就目前的了解和交流,也发现有好多公司也开始采用“协程”来完成服务器端的开发.传统的服务器端开发模型是:采用session异步方式调用来(调用其它好多服务时需要存状态,来完成一个完整的流程调用),这种方式稍稍复杂一点.采用”协程”的好处,常常被人提起的是:回归“同步调用型”的开发模型:程序调用api1(),api1返回之后调api2(),等api2返回之后调api3.. and so on. 这样的开发模式更加容易理解. 一.se

Thread in depth 1: The basic

Every single thread has the follow elements: Thread Kernel Object:TKO is a data structure.Everytime when a thread is created,a TKO will be assigned and initialized.TKO maintains a property of descriping the thread, and thread context. Thread Environm

PoEdu - Windows阶段班 【Po学校】Lesson006_线程_线程的启动到消亡 &amp;线程状态 &amp; 线程安全 &amp; CONTEXT结构体 &amp; 令牌锁

011_线程启动到死亡的详细讲解 1. 线程内核对象 使用计数 2 ##决定当前线程何时销毁 暂停计数 1 ##UINT类型初始为1,可以暂停多次,如置为0则取消暂停. 退出代码 STILL_ACTIVE Signaled FALSE CONTEXT 为空 2. 栈##在隶属于当前进程的空间中,分配一块"栈"空间,以供线程使用 参数 lpParam 入口地址 lpfnAddr 3. CONTEXT##线程上一次运行时的寄存器 IP(指令寄存器) void RtlUserThreadSt

Async/Await Context 与 ConfigureAwait

Context 当你await一个awaitable对象的时候,编译器会捕捉当前的context,并且在执行await之后的代码时应用这个context. 那么,context具体是什么呢? 简单地说: 1. 如果你在一个UI线程上,那么context就是一个UI context 2. 如果你在相应ASP.NET Request的线程上,那么它就是一个ASP.NET request context 3. 否则,它就是一个thread pool context 更加准确点说 1. 如果Synchr

Java 线程第三版 第八章 Thread与Collection Class 读书笔记

JDK1.2引入最有争议性的改变是将集合类默认为不是Thread安全性的. 一.Collection Class的概述 1. 具有Threadsafe 的Collection Class: java.util.Vector(List) 列表集合,通过索引操作. java.util.Stack(List) 继承自Vector,提供LIFO的顺序操作push进入,pop出元素. java.util.Hashtable(Map) 一个简单.无序的key与value的映射. java.util.conc

Apache下三种MPM模式:prefork,worker和event

MPM(Multi-Processing Module,多进程处理模块):prefork,worker和event 查看Apache的模式,可以使用httpd -V命令来查看:  /usr/local/apache2/bin/httpd  -V Server version: Apache/2.2.29 (Unix) Server built:   Aug 20 2015 20:11:21 Server's Module Magic Number: 20051115:36 Server load

[转载] boost thread用法

原文: http://antonym.org/2009/05/threading-with-boost---part-i-creating-threads.html boost库中thread的用法官方文档写的不是特别清楚, 这篇文章给出了比较清晰的介绍和例子. Threading with Boost - Part I: Creating Threads May 13, 2009 Boost is an incredibly powerful collection of portable cl

二、策略模式

1 策略模式实际上就是应对有各种策略(实现方法)的需求.比如超市促销,有多种多样的促销策略,这时候就要想到策略模式,策略模式一般会配合工厂模式使用. 代码如下: package com.biao.strategy.original; /** * * @author biao * 策略模式:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用 * 算法的客户. * * 应用:商场各种促销方案. * * 记忆方法:一个超类的算法家族+一个context容器.容器内