我正在使用Java Web应用程序后端。我们在init()方法中有一个Servlet
public static final ThreadLocal<HttpServletRequest> REQUEST_HOLDER = new ThreadLocal<HttpServletRequest>();
在service()方法中
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
然后,Servlet会根据请求设置REQUEST_HOLDER的值。
REQUEST_HOLDER.set(request);
稍后在servlet中,我想在另一个线程上做一些繁重的处理,但仍然引用ThreadLocal REQUEST_HOLDER的请求,这在技术上是在不同的线程上。这可能吗?怎么样? (多线程新手)
虽然这个一般概念已经在ThreadLocal value access across different threads中得到了很大的解决,但我想知道是否有任何关于servlets / http请求的独特内容可能会提供不同的解决方案。如果没有,不是。
还可以获取REQUEST_HOLDER ThreadLocal并覆盖get()方法,这样如果它为null(如从不同的线程调用时),它返回一个不同的值? - 考虑将请求存储在其他地方并让get()返回该值。
答案 0 :(得分:1)
另一种解决方案,而不是搞乱ThreadLocal机制,是从主线程中的请求对象中提取所有必要的数据,将其放入一个单独的数据对象,然后将此对象提供给新线程。
答案 1 :(得分:1)
一位同事告诉我,当我开始新线程时,我应该传递请求。然后在新线程中,我可以使用来自新线程的请求设置ThreadLocal REQUEST_HOLDER。谢谢大家的回答
答案 2 :(得分:0)
根据const char *line = "donuts,are,cool,and,tasty";
documentation,malloc()
变量已初始化,因此它们仅对各个线程可见。
当然,任何值都可以共享,因此可以让null
size_t length = strlen(token);
fields[i] = malloc(length + 1);
if (fields[i] != NULL) {
strcpy(fields[i], token);
}
方法返回的Java
值可供其他线程访问,但是这样做的目的就是失败了首先是一个变量。