java缓存(2、ThreadLocal<T>)

程序图

描述

ThreadCache类是ThreadLocal<T>类的封装,UserManagerServlet请求方法里面创建一个User对象,然后,将对象放到ThreadLocal中,然后,从UserManagerDao获得该对象,再返回给Servlet

程序

ThreadCache

package com.tgb.util;

import com.tgb.entity.User;

public class ThreadCache {
	private static ThreadLocal<User> threadLocal;
	static {
		threadLocal= new ThreadLocal<User>();
	}
	public static User getUser(){
		return threadLocal.get();
	}
	public static void setUser(User user){
		threadLocal.set(user);
	}
}

Servlet

package com.tgb.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.tgb.entity.User;
import com.tgb.service.UserManagerService;
import com.tgb.util.ThreadCache;

public class UserManagerServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request,response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		int id = Integer.parseInt(request.getParameter("id"));
		String name = request.getParameter("name");
		String password = request.getParameter("password");

		User user = new User();
		user.setId(id);
		user.setName(name);
		user.setPassword(password);
		ThreadCache.setUser(user);

		UserManagerService userManagerService = new UserManagerService();
		User getUser = userManagerService.getUser();
		System.out.println(getUser);

	    response.sendRedirect(request.getContextPath() + "/index.jsp");
	}
}

Dao

package com.tgb.dao;

import com.tgb.entity.User;
import com.tgb.util.ThreadCache;

public class UserDao {
	public User getUser(){
		return ThreadCache.getUser();
	}
}

增强版Demo

概述

对于上面的demo,非常的简单,主要是让大家了解ThreadLocal的功能,其在项目中真正的用途是存储Connection,从达到Service管理事务的目的,下面将给大家介绍一个比较好的demo。

类图概要

描述

ConnectionContext是数据库连接对象池,使用的是c3p0;

ConnectionPoolManager是ThreadLocal<T>的封装;

TransactionManager是事务的封装;

Filter过滤请求,开启事务,调用Servlet,最后,Filter提交事务;

BaseDao使用泛型和反射,实现简单的ORM思想,使程序操作的都是对象;

总结

demo2里面知识点挺多的,是一个比较全面的例子,分页封装,json封装,ThreadLocal,c3p0,事务应用,反射和泛型,自定义注解(demo,没有应用到项目里),有兴趣的可以下载源码看看,这里不做过多介绍。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-17 19:12:35

java缓存(2、ThreadLocal<T>)的相关文章

java缓存(1、概述)

概述 对于程序员来说,听到缓存,一定会非常的亢奋,因为这年代,你去找工作,说不知道缓存,没用过缓存,都不好意思说自己是程序员,所以说缓存时一个非常热的话题,今天就讲一下自己关于缓存的理解,希望对于对大家有相应的帮助. 缓存概念 学习一个东西,我们首先应该清楚他是什么,那么,缓存到底是什么呢?缓存就是内存里面用于存放数据的空间,即,缓存就是内存.缓存的目的是什么呢?缓存就是为了优化程序查询IO数据,将程序经常从IO中查询的数据,保存到内存中,使程序直接操作内存即可获得数据,优化了程序等待IO数据的

Java 缓存技术

以下仅是对map对方式讨论.没有对点阵图阵讨论.作缓存要做以下2点:  1:清理及更新缓存时机的处理: . 虚拟机内存不足,清理缓存 .. 缓存时间超时,或访问次数超出, 启动线程更新 2:类和方法的反射 (线程嵌套调用) reflect.invoke的使用. JAVA缓存有两种: 一.文件缓存,是指把数据存储在磁盘上,可以XML格式,也可以序列化文件DAT格式还是其它文件格式. 二.内存缓存,也就是实现一个类中静态Map,对这个Map进行常规的增删查. 代码如下:内存中的缓存 package

(转)java缓存技术,记录

http://blog.csdn.net/madun/article/details/8569860 最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考.此为转贴,帖子来处:http://cogipard.info/articles/cache-static-files-with-jnotify-and-ehcache 介绍 JNotify:http://jnotify.sourceforge.net/,通过JNI

Java缓存

Java中要用到缓存的地方很多,首当其冲的就是持久层缓存,针对持久层谈一下: 要实现java缓存有很多种方式,最简单的无非就是static HashMap,这个显然是基于内存缓存,一个map就可以搞定引用对象的缓存,最简单也最不实用,首要的问题就是保存对象的有效性以及周期无法控制,这样很容易就导致内存急剧上升,周期无法控制可以采用SoftReference,WeakReference,PhantomReference这三种对象来执行(看了Ibatis的缓存机制才发现JDK居然还提供了Phanto

JAVA缓存技术

最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考.此为转贴,帖子来处:http://cogipard.info/articles/cache-static-files-with-jnotify-and-ehcache 介绍 JNotify:http://jnotify.sourceforge.net/,通过JNI技术,让Java代码可以实时的监控制定文件夹内文件的变动信息,支持Linux/Windows/MacO

java笔记--用ThreadLocal管理线程,Callable&lt;V&gt;接口实现有返回值的线程

用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程 ThreadLocal在我的笔记"关于线程同步"的第5种方式里面有介绍,这里就不多说了. --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3899890.html  "谢谢-- Callable<V>接口类似于Runnable,两者都是为了哪些其实例可能被另一个线程执行的类设计的, 但是Runnable不会返回

JAVA学习篇--ThreadLocal,Java中特殊的线程绑定机制

在DRP项目中,我们使用了ThreadLocal来创建Connection连接,避免了一直以参数的形式将Connection向下传递(传递connection的目的是由于jdbc事务要求确保使用同一个connection连接).那么ThreadLocal是如果做到的呢?它和同步锁的不同在哪里? 是什么: 对于ThreadLocal看英文单词我们很容易理解为一个线程的本地实现,但是它并不是一个Thread,而是threadlocalvariable(线程局部变量).也许把它命名为ThreadLoc

针对Properties中实时性要求不高的配置参数,用Java缓存起来

Properties常用于项目中参数的配置,当项目中某段程序需要获取动态参数时,就从Properties中读取该参数,使程序是可配置的.灵活的. 有些配置参数要求立即生效,有些则未必: 一.实时性要求非常高.项目中,有些参数要求实时性非常高,即在系统运行中,IT人员修改了该参数值,该新参数值要求立即在程序中生效: 二.实时性要求不高.其实,并不是每个配置参数都要求实时性那么高,有些配置参数基本不会在项目运行当中修改,或即使在运行当中修改,也只要求其在下一次项目启动时生效. 针对第二种情况,鉴于程

Map实现java缓存机制的简单实例

缓存是Java中主要的内容,主要目的是缓解项目访问数据库的压力以及提升访问数据的效率,以下是通过Map实现java缓存的功能,并没有用cache相关框架. 一.缓存管理类 CacheMgr.java package com.henu.util; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; imp

Java缓存流

//缓存数据流    @Test    public void testBufferReaderAndWriter() throws IOException{        //创建文件字符输入流        Reader in=new FileReader("abc.txt");        BufferedReader br=new BufferedReader(in);        Writer out=new FileWriter("abc4.txt"