java - 引用计数是一个好的设计吗

标签 java reference-counting

我们正在开发一个应用程序容器,它使用引用计数作为跟踪收到的请求和发送的响应的机制。引用计数用于允许容器正常关闭,即 if (refCount == 0) shutdown;

对于每个请求以及待处理的响应,引用计数都会增加。仅当应用程序接受请求并且仅当应用程序发送有效响应时,引用计数才会递减。 所以这是我的问题,在这种情况下,与保留仅在应用程序/容器发送响应时关闭的 RequestContext 相比,引用计数是否是一个好的设计决策?

由于该软件是用 Java 实现的,所以我在查看 Java 中的其他选项并发现了这篇文章,http://weblogs.java.net/blog/2006/05/04/understanding-weak-references这让我认为尝试利用 ReferenceQueue 可能是实现此目的的另一种方法。

最佳答案

这实际上是一种非常巧妙的方法。您还应该另外使用 ThreadLocal (如果您的请求-响应管道将由单个线程处理)

基本上,当您收到请求时。将带有 WeakRefernce 的 ThreadLocal 设置为您的请求对象(或请求的某些属性,例如用户 ID 等)。然后您可以在处理管道中的任何位置 get() 该对象。

如果您使用工作线程池来处理请求,请确保从线程的 ThreadLocal 中取消设置弱引用对象,以便不再存在该对象的引用。如果您为每个请求生成一个新线程,则甚至不需要这样做。当线程终止时,该对象将自动返回到引用队列(因为没有 Activity 引用指向该对象)

关于java - 引用计数是一个好的设计吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6933171/

相关文章:

java - 在 Apache Kafka 中保留数据

java - 如何在 junit 目标中将 jacoco 与 ant 集成

c++ - 指针 'this' 可以是共享指针吗?

c++ - 智能指针,或 "better"析构函数

c++ - 了解 C++ std::shared_ptr

java - 无法识别 JDBC 列

java - 同一台机器上不同项目中的控制台输出不正确

java - 使用已编译的 XSL 转换

python - 为什么在 C 中返回 Py_None 之前需要 Py_INCREF(Py_None)?

c# - 无锁引用计数