在下面的代码中,我想将get_data变量设置为线程安全的。 给我一些代码。
public class Home_page_action extends HttpServlet {
String get_data;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
答案 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();
}
}