我有一个静态方法如下:
public static void writeArticle(TypeA typeA, TypeB typeB) {
AWriter writer = AFactory.getWriter("aWriter");
Article article = writer.newArticle();
/* PARAMETER WRITE START */
article.set("title", typeA.getTitle());
article.set("author", typeB.getName());
article.set("age", typeB.getAge());
// …
/* more set statments here */
writer.write(article);
}
这种方法是否会导致编写者编写值混合文章的问题?也就是说,当调用此方法的2个类(A类和ClassB)实例时,Article会从ClassA中获取一些typeA值吗?从ClassB中获取一些值?
答案 0 :(得分:5)
没有。为什么你认为来自两个不同调用的参数会混淆?没有理由认为他们愿意。
如果这是一个多线程程序,你应该小心在线程之间共享对象;如果这些对象具有可变状态(可以更改的成员变量),则应注意两个线程不会同时修改状态。
答案 1 :(得分:4)
每当你说static
时,你都不会谈论实例方法调用。应始终使用类名调用静态方法。
静态方法在实例级别完全隔离。即使它可能写出一个混合值,但它是你想要它写的不是吗?
答案 2 :(得分:3)
不,方法参数和局部变量是线程安全的,只要它们不引用共享对象。
答案 3 :(得分:0)
没有。否则这将是地狱。
答案 4 :(得分:0)
只有当两个呼叫都被访问并且改变了公共状态时才会出现这种情况。假设定义此方法的类称为ArticleWriter
,它们将读取和更改ArticleWriter
的静态字段。
答案 5 :(得分:0)
这对你的代码来说是不可能的。 typeA
方法getTitle
,typeB
方法getName
。哪些领域变得混乱?
答案 6 :(得分:0)
从这段代码片段中无法知道。要解决的第一个问题是,是否可以同时从两个不同的线程调用此方法。如果是这样,问题很可能是两个线程同时修改同一个对象(文章或作者)。解决这个问题的最简单方法是同步writeArticle()。