ThreadLocal技术
来源:互联网 发布:绝爱后宫我知帝王心txt 编辑:程序博客网 时间:2024/05/02 04:25
ThreadLocal技术:
ThreadLocal,顾名思义,它不是一个线程,而是线程的一个本地化对象,当线程中的对象使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程分配一个独立的变量副本,所以每一个线程都可以独立的使用自己的副本,而不会影响其他线程所对应的副本。从线程角度,这个变量就像线程的本地变量.
ThreadLocal与线程同步机制比较
ThreadLocal是从另一个角度来解决多线程并发访问,它为每个线程提供了一个独立的变量副本,从而也就没有必要对该变量进行同步了。它提供了线程安全的对象封装,在编写多线程代码时,可以把不安全的变量封装进ThreadLocal。
总结:
概况起来说,对于多线程资源共享的问题,线程同步机制采用了”以时间换空间”的方式:即访问串行化,对象共享化。而ThreadLocal采用了”以空间换时间”的方式:即访问并行化,对象独享化。
Demo如下:
package com.zh.util;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;/** * hibernate工具类(线程安全)思想:以空间换时间 * * @author Administrator * */public class HibernateUtilEX { private static Configuration configuration = null; private static SessionFactory sessionFactory = null; // 本地化线程、底层有一个Map<K,V> K:线程ID V:session 一个线程绑定一个session private static ThreadLocal<Session> localSession = null; static { try { // 加载Hibernate配置文件(默认加载bihernate.cfg.xml) configuration = new Configuration().configure(); // 获取SessionFactory工厂对象 sessionFactory = configuration.buildSessionFactory(); localSession = new ThreadLocal<Session>(); } catch (Exception e) { System.out.println("加载hibernate映射文件失败"); e.printStackTrace(); } } /** * 得到Session对象 * * @return Session */ public static Session openSession() throws HibernateException { Session session = localSession.get(); if (session == null) { session = sessionFactory.openSession(); localSession.set(session); } return session; } /** * 关闭Session * * @throws HibernateException */ public static void closeSession() throws HibernateException { Session session = localSession.get(); if (session != null) { session.close(); } localSession.set(null); }}
注:如果资源不可复制,ThreadLocal不能使用
阅读全文
0 0
- ThreadLocal技术
- ThreadLocal技术分析
- java中ThreadLocal技术原理分析
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- ThreadLocal
- 安卓开发一些常用工具的设置以及注意点
- 码流 / 码率 / 比特率 / 帧速率 / 分辨率 / 高清
- Python垃圾回收(gc)拖累了程序执行性能?
- linux命令——netstat
- 修复.NET中通过HttpWebRequest 中GET 方法丢失Cookie的bug
- ThreadLocal技术
- spring 的父子容器解析
- 协同过滤算法实现
- MySql Order by 、Group by优化
- Openstack卷迁移状态图
- 【Spring】在Java使用Spring时的Resource leak: 'applicationContext' is never closed警告
- android res资源文件分包
- JVM GC 相关内容(待续)
- 安装 MySQL 后,需要调整的 10 个性能配置项