`
绿茵好莱坞
  • 浏览: 25635 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

day18 10.使用ThreadLocal来解决问题

 
阅读更多
ThreadLocal是一个容器/集合,是一个Map集合。不管你跨多少层,只要你是同一个线程就可以取出来。Service和Dao是同一个线程。Service第一次调用JdbcUtils.getConnection()方法,把Connection对象装入ThreadLocal容器,当Dao层第二次和第三次调用的时候JdbcUtils.getConnection()方法的时候直接就获取的是ThreadLocal容器里面的Connecton对象。ThreadLocal能够保证的事情是在同一个线程里面拿到的是同一个值。它就是一个Map集合,Map集合的key就是一个线程对象,value就是你存的值。你Map.get()的时候它底层是拿到你当前线程的对象去调用值。如果是同一个线程那就是同一个值。Map集合的key是不重复的。三层用的是同一个Connection。

--------------------------------------------------------------------------------



--------------------------------------------------------------------------------

如果不是同一个线程,那是玩不了的。我们现在的操作肯定是同一个线程,因为你是从Servlet过来,Servlet每次请求都是一个线程,Servlet调ServiceService调用Dao,完事之后Dao回到ServiceService回到Servlet,Servlet执行完线程结束,响应回去嘛,线程结束。下次再请求又是一个新线程。每次getConnection都是绑定到这个线程里面的Connecton对象。JdbcUtils.getConnection()每次都是绑定到一个线程里面的Connection对象。
分享到:
评论

相关推荐

    使用ThreadLocal解决代码分层问题

    javaee开发常见的模式有MVC模式,在C层中常常会再次分层,如:servlet(web层)、service(业务逻辑层)、dao(数据访问层),其中service和dao最容易混在一起,如转...所以,使用ThreadLocal可以解决这样的分层问题。

    入研究java.lang.ThreadLocal类.docx

    String value = threadLocal.get(); ``` ##### protected T initialValue() **用途**:返回当前线程的初始值。通常情况下,该方法仅在线程首次访问 ThreadLocal 变量时被调用一次。 **示例代码**: ```java ...

    ThreadLocal

    ThreadLocal通常被用来解决线程共享数据时可能出现的并发问题,避免了使用synchronized关键字进行同步控制的复杂性。 在Java中,ThreadLocal的工作原理是为每个线程创建一个单独的存储空间,每个线程可以独立地读写...

    使用ThreadLocal管理“session”数据

    ThreadLocal主要用于解决线程间的数据隔离问题,确保各线程拥有自己的变量副本,避免了数据共享带来的并发问题。在Web应用中,特别是对于"session"数据的管理,ThreadLocal可以作为一种有效的解决方案。 1. **什么...

    ThreadLocal应用示例及理解

    - ThreadLocal不是线程同步机制,不能用来解决多个线程访问共享资源的问题。 - 不要将ThreadLocal用作全局变量,否则可能导致内存泄漏。 - 使用ThreadLocal时,要特别注意线程结束后的清理工作,防止内存泄漏。 - ...

    ThreadLocal中内存泄漏和数据丢失问题的问题浅析及解决方案.docx

    ThreadLocal 中内存泄漏和数据丢失问题的问题浅析及解决方案 ... ThreadLocal 是一种非常有用的机制,但是需要注意其可能出现的内存泄漏和数据丢失问题,並采用正确的解决方案来避免这些问题的出现。

    JDK的ThreadLocal理解(一)使用和测试

    System.out.println(threadLocal.get()); // 输出 "线程A的值" // 在线程B中,由于没有设置过值,get()将返回null System.out.println(threadLocal.get()); // 输出 null ``` ### 2. ThreadLocal生命周期 ...

    Quartz-ThreadLocal.rar

    这个压缩包 "Quartz-ThreadLocal.rar" 内含的学习资源很可能是关于如何在 Quartz 调度器中结合使用 ThreadLocal 的示例。 Quartz 的核心功能包括: 1. **作业与触发器**:在 Quartz 中,任务被称为“作业”(Job)...

    java中ThreadLocal类的使用

    然而,使用`ThreadLocal`也需要注意一些问题: - **内存泄漏**:如果`ThreadLocal`没有被正确清理,当线程生命周期结束但引用仍然存在时,可能导致内存泄漏。因此,通常在不再需要`ThreadLocal`时,应该调用`remove`...

    ThreadLocal整理.docx

    ThreadLocal 整理 ThreadLocal 是 Java 中... ThreadLocal 是 Java 中的一个重要组件,它能够在每个线程中保持独立的副本,解决 Hash 冲突的机制是通过斐波那契数来实现的,并且提供了扩容机制来避免内存泄漏的问题。

    从ThreadLocal的使用到Spring的事务管理

    总结起来,ThreadLocal和Spring的事务管理是Java开发中解决并发问题和保证数据一致性的重要手段。熟练掌握这两个概念,有助于构建稳定、高效的分布式系统。通过深入学习源码和实际应用,我们可以更好地理解其工作...

    使用Java ThreadLocal.docx

    threadLocal.set((int) (Math.random() * 100D)); try { Thread.sleep(2000); } catch (InterruptedException e) { } System.out.println(threadLocal.get()); } } public static void main(String[] args...

    正确理解ThreadLocal.pdf

    `ThreadLocal`是Java平台提供的一种线程局部变量的解决方案,它为每一个使用该变量的线程都提供了独立的变量副本,使得每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。这不同于普通的静态...

    Java中ThreadLocal的设计与使用

    Java中的ThreadLocal是一个非常重要的工具类,它在多线程编程中扮演着独特角色,...总之,ThreadLocal是Java多线程编程中的一个强大工具,但使用时需谨慎,理解其工作原理和潜在风险,才能更好地利用它来解决实际问题。

    ThreadLocal原理及在多层架构中的应用

    综上所述,ThreadLocal是Java多线程编程中的一个重要工具,合理使用能解决许多并发问题,但同时也需要注意其潜在的风险。在多层架构中,ThreadLocal可以有效地提高代码的可读性和性能,但也需要谨慎使用,遵循最佳...

    Java单线程ThreadLocal串值问题解决方案

    例如,在示例代码中,我们使用了ThreadLocal<String> currentUid = ThreadLocal.withInitial(() -> null);来定义一个ThreadLocal变量currentUid,该变量的初始值为null。 问题出现 在示例代码中,我们使用了@...

    ThreadLocal的原理,源码深度分析及使用.docx

    ThreadLocal 是 Java 语言中的一种机制,用于实现线程本地存储,能够帮助开发者在多线程环境下解决变量访问安全的问题。下面将对 ThreadLocal 的原理、实现机制、使用方法等进行深入分析。 什么是 ThreadLocal? ...

Global site tag (gtag.js) - Google Analytics