java:如果我在每个请求上创建新对象,我还需要线程吗?

java:如果我在每个请求上创建新对象,我还需要线程吗?,java,thread-safety,Java,Thread Safety,一般性问题我想它也可以用c来表示 如果我有从包装函数调用的(在我的例子中是http requst类) 此包装器函数是公共API。然后,在包装函数内部,i初始化新的请求对象,该对象假定使用来自包装函数的参数执行请求 我是否需要将请求对象包装在线程中(我有执行工作线程的线程池类) 为每个请求在堆栈上创建对象可以吗? 例如: public void Wrapper(String a,String b) { // im doing .. MyRequst req = new MyRequest(a,b

一般性问题我想它也可以用c来表示
如果我有从包装函数调用的(在我的例子中是http requst类)
此包装器函数是公共API。然后,在包装函数内部,i初始化新的请求对象,该对象假定使用来自包装函数的参数执行请求
我是否需要将请求对象包装在线程中(我有执行工作线程的线程池类)
为每个请求在堆栈上创建对象可以吗?
例如:

public void Wrapper(String a,String b)
{

// im doing ..
MyRequst req = new MyRequest(a,b); // will do the http requst 

}

or to do :

public void Wrapper(String a,String b)
{

// im doing ..
MyThreadPool.GetInstance().RunTask(new MyRequest(a,b)); // will do the http request 

}

问题不是很清楚,但从可以推断的情况来看,相关的问题是创建局部变量是否足以保证线程安全。答案是肯定的

发件人:

访问共享的、可变的数据 需要使用同步;单程 要避免这一要求,就必须 分享。如果仅从数据库访问数据 单线程,不支持同步 需要

应该记住,所有对象都存储在堆上。堆栈上的项目总是一个字宽(长值和双值除外);不要将这些变量与Java编程语言中的方法局部变量概念混淆(人们错误地认为这些变量存储在堆栈上)


通过使用局部变量,可以确保堆上的对象仅可由当前执行线程访问,当然,除非尝试与其他线程共享此类对象(在这种情况下,需要使用适当的同步技术)。

这为您可能尝试的操作提供了一种替代方法。 我假设您正在尝试操纵请求对象。您是否考虑过使用“HttpServletRequestWrapper”

检查此链接: 在上面的网页中,转到“定制请求和响应编程”部分

再比如,,

通常,如果处理请求是一项长时间运行的任务,或者涉及阻塞IO,那么每个请求都应该在单独的线程中处理。