我希望通过静态工厂方法获取对象,例如
Person p = Person.fromName("Jack");
class Person {
public static Person fromName(String name){
return new Person(name);
}
}
但fromName()方法不是线程安全的,(fromName()只是一个例子,这种方法在我的程序中运行时会发生错误)但是,如果同步这个方法效率很低,因为多个线程应该调用这个方法同时进行。有什么建议可以解决吗?
答案 0 :(得分:2)
如果你有同时在多个线程中执行不安全的代码,但你想从多个线程调用它,听起来你真的只有两个选择:
您尚未提供任何可能表明哪种情况最适合您的情况的信息。 (您是否测量过同步性能?是否尝试过使用线程安全?)
答案 1 :(得分:1)
当你说
时,你的问题似乎无法解决A)该方法不是线程安全的(因此需要以同步的方式使用)和
B)由于效率原因,它可能无法同步。
我能给你的唯一建议是尽可能地执行细粒度同步,即只对该方法的线程不安全的部分进行同步。
例如,如果声明S1
需要与S2
一起原子地执行,那么您可以而不是
public synchronized static Person fromName(String name){
...
S1;
S2;
...
return ...;
}
DO
public static Person fromName(String name){
...
synchronized (lock) {
S1;
S2;
}
...
return ...;
}