对静态方法的并发访问

我有一个具有以下签名的静态方法:

public static List<ResultObjects> processRequest(RequestObject req){
  // process the request object and return the results.
}

当同时对上述方法进行多个调用时,会发生什么情况?请求是并发处理还是一个接一个地处理?


答案 1

准确回答您的问题:

  1. 方法将同时执行(如果您有多个线程,则在同一时间执行多次)。
  2. 请求将同时处理。

如果您正在处理需要并发访问的对象,则需要添加修饰符。synchronized


答案 2

您对该方法的所有调用都将同时执行...但:

一旦静态方法的代码修改了静态变量,您可能会遇到并发问题(并且处于非线程安全的情况下)。在这种情况下,您可以将方法声明为synchronized

如果您的方法仅使用局部变量,则不会有并发问题。


推荐