Java 这里需要同步吗?

Java 这里需要同步吗?,java,concurrency,Java,Concurrency,我有一个名为无状态servlet的servlet,它每次都实例化一个新的有状态对象。我是否需要提供此有状态对象的同步 代码如下: public class StatelessServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IO

我有一个名为无状态servlet的servlet,它每次都实例化一个新的有状态对象。我是否需要提供此有状态对象的同步

代码如下:

      public class StatelessServlet extends HttpServlet {

        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            StatefulObject stObj = new StatefulObject(Integer.parseInt(req.getParameter("id")));
            stObj.performSomeStatefulOperation();
            ...
        }

    }

    class StatefulObject {
        private int id;

        public StatefulObject(int id) {
            this.id = id;
        }

    //Is synchronized really needed here???
    public synchronized void performSomeStatefulOperation() {
        id++;
    }
}

根据Brian Grotz JCIP,每个有状态的对象都应该同步,所以理想情况下我们应该同步这个方法

不需要同步,因为每个线程都有自己的StatefulObject实例,其他线程无法访问该实例。

如果与服务器的每次交互都创建一个新对象并丢弃它,那么不进行同步是相对安全的(同时访问服务的多个线程之间没有共享状态)

另一方面,如果重用了这些对象,则必须同步该方法

此外,例如,如果您的
performSomeStatefulOperation
更改了某些共享数据的状态,那么您应该同步它,除非您采取其他步骤来保证它的线程安全(例如使用锁)


总之,这取决于您在方法中所做的事情。从您展示的情况来看,如果多次调用该方法可能会出现问题(因为它会更新共享状态),则没有必要这样做,然后你应该同步它。

我想收回我的投票,但不知道如何进行。
根据Brian Grotz JCIP,每个有状态对象都应该同步。
false-Goetz描述了多种其他技术,如线程限制、原子变量的使用等。