如何使servlet实例变量线程安全?

时间:2014-04-28 12:07:29

标签: java servlets thread-safety

在下面的代码中,我想将get_data变量设置为线程安全的。 给我一些代码。

public class Home_page_action extends HttpServlet {

String get_data;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

              }

}

2 个答案:

答案 0 :(得分:1)

首先建议,请不要创建实例变量。由于只创建了一个servlet副本,唯一的线程安全变量是方法内的自动变量。

局部变量始终是线程安全的。 但请记住,局部变量指向的对象可能不是这样。 如果对象在方法中实例化,并且永远不会逃脱, 没有问题。另一方面,指向某个共享对象的局部变量仍可能导致问题。 仅仅因为您将共享对象分配给本地引用,并不意味着该对象自动变为线程安全。

请求和响应对象当然是线程安全的。 为servlet中的每个请求创建一个新实例,从而为servlet中执行的每个线程创建。

答案 1 :(得分:0)

您正在寻找

java.util.concurrent.atomic软件包,您可以在此软件包中使用AtomicXXX版本的可用类型。

这个包是

  

支持无锁线程安全的类的小工具包   对单个变量进行编程。

Java document中给出的示例:

import java.util.concurrent.atomic.AtomicInteger;

class AtomicCounter {
    private AtomicInteger c = new AtomicInteger(0);

    public void increment() {
        c.incrementAndGet();
    }

    public void decrement() {
        c.decrementAndGet();
    }

    public int value() {
        return c.get();
    }

}