1

最近我的一个同事想出了一段代码,并询问我对代码线程安全的看法。下面是一个示例,说明了与代码相同的场景。

public class classA
{
   public int DoWorkA() 
   { 
       //some logic 
   }
}

public class classB
{
     public static classA objA = new classA();
}

public class classC
{
        int DoWorkC () 
        {

           return classB.objA.DoWorkA();

        }
}

现在,如果在 ClassC、ClassD 等不同类的不同实例中同时调用 ClassB.objA.DoWorkA() 是否会出现任何线程或“重叠”问题?是否应该将 objA 转换为实例成员?

4

2 回答 2

2

因为objA是静态的,所以只有一个classA. 这意味着所有线程都访问同一实例DoWorkA()上的方法,但这并不意味着方法调用是线程安全的——这完全取决于.DoWorkA()

您仍然需要适当的逻辑DoWorkA来防止并发访问可能出现的问题,例如使用锁定或线程安全集合等。

于 2012-06-05T17:26:45.123 回答
1

是否会有任何线程或“重叠”问题

这取决于做什么//some logic。每个调用都将共享同一个实例,因此DoWorkA需要线程安全才能使其正常运行。

为了安全起见,其中使用的任何数据都//some logic需要适当的同步。

于 2012-06-05T17:26:55.157 回答