Java 使用内存中的DB而不是ThreadLocal的优缺点是什么
到目前为止,我们一直在使用ThreadLocal来传输一些数据,以避免API混乱。然而,下面是一些我不喜欢的使用线程本地的问题 1) 多年来,本地线程中携带的数据项有所增加 2) 自从我们开始使用线程(用于一些轻量级的处理)以来,我们还将这些数据迁移到池中的线程,并再次将它们复制回来 我正在考虑为这些应用程序使用内存中的DB(我们不想将其添加到API中)。我想知道这种方法是否好。利与弊是什么 好,这里是一个简单的场景Java 使用内存中的DB而不是ThreadLocal的优缺点是什么,java,thread-local,Java,Thread Local,到目前为止,我们一直在使用ThreadLocal来传输一些数据,以避免API混乱。然而,下面是一些我不喜欢的使用线程本地的问题 1) 多年来,本地线程中携带的数据项有所增加 2) 自从我们开始使用线程(用于一些轻量级的处理)以来,我们还将这些数据迁移到池中的线程,并再次将它们复制回来 我正在考虑为这些应用程序使用内存中的DB(我们不想将其添加到API中)。我想知道这种方法是否好。利与弊是什么 好,这里是一个简单的场景 用户登录并提交请求 系统为整个请求建立上下文,包括 -此请求的唯一id -用户
您可能希望引入请求上下文:
如果使用WebContainer,则可以在筛选器中处理此类对象的创建/销毁;如果使用ApplicationServer,则可以在拦截器中处理此类对象的创建/销毁 我担心你使用ThreadLocal。您是否关心并发性问题?如果没有,那么为什么要使用ThreadLocal?如果是,那么您是否计划为每个正在运行的线程创建一个内存中的数据库?数据项对于给定的请求是唯一的,我们不想将这些数据到处传递。。。我们为每个事务(或请求)生成一个唯一密钥,我可以根据唯一密钥集中存储数据(当前在threadlocal中)。现在很难回答这个问题,因为不清楚用例是什么。。您可能需要添加一些说明性代码。我的意思是,
ThreadLocal
中的键是线程本身,对吗?那你有另一把独特的钥匙吗??至于“传递数据”,通常会封装任何数据并传递对它的引用。。似乎与API的混乱无关。就我个人而言,我很困惑。@Pangea:我认为内存中的数据库在这方面做得太过分了。特别是如果数据是临时的。但很难说,因为我真的不知道存储的数据类型。我建议您考虑另一种存储解决方案。也许有点像中央位置的ConcurrentHashMap。这样,如果您真的找到了修复此设计缺陷的方法,那么很容易删除。