当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:15:00  来源:本站整理

操作ThreadLocal情势管理Session[Java编程]

赞助商链接



  本文“操作ThreadLocal情势管理Session[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

在操纵Hibernate开辟DAO模块时,我们和Session打的交道最多,所以若何公道的管理Session,避免Session的频繁成立和销毁,关于提高系统的性能来说是非常重要的,以往是通过eclipse的插件来自动完成这些代码的,当然效果是不错的,但是老是认为不爽(没有读懂那些冗长的代码),所以目前打算自己实现Session管理的代码.

我们知道Session是由SessionFactory负责成立的,而SessionFactory的实现是线程安全的,多个并发的线程可以同时拜候一个SessionFactory并从中获得Session实例,那么Session能否是线程安全的呢?很遗憾,答案能否定的.Session中包含了数据库操作相关的状况信息,那么说假如多个线程同时利用一个Session实例举行CRUD,就很有大概招致数据存取的混乱,你可以想像那些你根本不能猜测履行次序的线程对你的一条记录举行操作的情形吗?

在Session的众多管理筹划中,我们本日来熟习一种名ThreadLocal情势的办理筹划.

早在Java1.2推出之时,Java平台中就引入了一个新的支持:java.lang.ThreadLocal,给我们在编写多线程程序时供应了一种新的挑选.ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并非一个Thread,而是thread local variable(线程部分变量).大概把它命名为ThreadLocalVar越发符合.线程部分变量(ThreadLocal)其实的功用非常简单,就是为每一个利用某变量的线程都供应一个该变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和别的线程的副本冲突.从线程的角度看,就仿佛每一个线程都完好拥有一个该变量.

ThreadLocal是若何做到为每一个线程保护变量的副本的呢?其实实现的思绪很简单,在ThreadLocal类中有一个Map,用于存储每一个线程的变量的副本.比方下面的示例实现(为了简单,没有考虑调集的泛型):

public class ThreadLocal {
   private Map values = Collections.synchronizedMap(new HashMap());
   public Object get() {
   Thread currentThread = Thread.currentThread();
   Object result = values.get(currentThread);
    if(result == null&&!values.containsKey(currentThread)) {
     result = initialValue();
     values.put(currentThread, result);
      }
      return result;
     }
   public void set(Object newValue) {
    values.put(Thread.currentThread(), newValue);
    }
   public Object initialValue() {
    return null;
   }
  }


  以上是“操作ThreadLocal情势管理Session[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 操作ThreadLocal情势管理Session
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .