gpt4 book ai didi

java - 如何通过 ThreadId 检测线程结束?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:34:02 28 4
gpt4 key购买 nike

在这里谈论 Java Servlets...我正在努力创建我自己的“每个请求上下文”,我希望将“每个请求上下文”对象与 Thread.currentThread().getId() 值联系起来。

我计划在用户调用基于 Per Request 的函数时检查当前线程 ID,并自动从该线程 ID 的哈希表中获取上下文对象,而不是在任何地方传递此上下文对象。

我会像这样使用代码......

public void doPost(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException
{
MyFramework.EnterContext();
try {
// do stuff here that leads to other classes on the same thread
// Access current context via static MyFramework.getCurrentContext()
}
finally { MyFramework.ExitContext(); }
}

但是我想自动保护我的应用程序免受任何未调用 ExitContext() 的潜在用户的影响。 在 C# 中,线程对象上有一个用于 onexit 的事件处理程序... (认为我错了)是否有某种方法可以检测或轮询线程何时退出?我目前只存储 threadId(长)。

有什么想法吗?

最佳答案

不幸的是,Java 中并没有为线程内置这样的功能。此外,线程 id 只保证在任何时候都是唯一的,但最终可能会在线程死亡时被重用(来自文档)。但是,您正在使用的 servlet 框架可能正在实现此类功能(只是一种推测)。

我建议您实现一个 servlet 过滤器,并告诉您的用户将其包含在他们的 web.xml 中。有了这个,您可以确保客户端代码始终正确地包装在您的线程上下文中。

关于java - 如何通过 ThreadId 检测线程结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10325691/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com