java - "NullPointerException"当许多引用访问我的方法时

标签 java

我有这门课:

public class A {
     List l;
     public String method() {
         l = new ArrayList();
         try {
             .....
             l.add(new Integer(5));
             .....
         }
         catch (Exception e) {
             ......
         }
         finally {
             if(l!=null)
                 l=null;
         }

我有许多用户运行相同的模板(gtmpl),其中包含:

A a = new A();
a.method();

问题在于用户在另一个用户执行 l=null; 之后直接到达 l.add(new Integer(5));。我收到一个 NullPointerException。我不明白为什么?我以为每个线程都会分配一个列表?怎么了?

最佳答案

您是否为每个线程创建一个新的A实例?如果线程共享 A 的实例,则 List 类型的字段/实例变量将使代码不线程安全。

理解线程安全 (IMO) 的最佳方法之一是考虑 J2EE 环境中提供的示例 Servlet。一个应用程序只会创建一个 servlet 实例,而同一个 servlet 实例会处理多个请求(每个请求都链接到一个线程),因此,如果将实例变量放入 servlet 中,必然会出现线程安全问题。

this article阅读。

关于java - "NullPointerException"当许多引用访问我的方法时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17165699/

相关文章:

java - 如何保留动态创建的 Camel 路线?

java - 如何在同一个按钮上添加两个ActionListener来执行Timer.start()/Timer.stop()方法

java - 如何在二进制数前面加0

java - java中数据发送缓冲区的一般实现是什么?

Java + MySQL - 更新时覆盖行

java - java.math.RoundingMode 是如何工作的?

java - 我如何知道 BufferedReader 的 readAheadLimit?

java - 制作主密码并将其存储在 Android 设备上

java - 如果我使用 API 版本不支持的样式,会发生什么情况

java - Service 如何与其 Activity 通信?服务如何调用启动该服务的 Activity 中的方法?