我从一本公认的示例书中看到了这一点,所以很难回答,然后有些我不明白的地方。静态变量,线程和构造函数Java
称为DataflightsService类包含名为FlightFileAccess一个私有静态变量出现每次我们创建DataflightsService一个新的对象FlightFileAccess的构造函数
即
public class DataflightsService{
private static FlightFileAccess fileAccess=null;
public DataflightsService(String path){
fileAccess=new flightFileAccess(path);
}
public boolean removeflight(String code){
//We use this static instance that wraps functionality to remove a flight
fileAccess.remove(code);
}
}
开始其被实例化
对我来说,这意味着我们每次创建的实例10,在构造函数中使用的是不同的对象所有的时间静态变量FlightFileAccess
在原有
FlightFileAccess
类:我们有一个同步的RandomAccessFile
Class FlightFileAccess{
private RandomAccessFile database = null;
private boolean remove(String code){
// Other code goes here and there
synchronized (database) {
//Perform deletion code
}
}
是因为remove方法我们正在使用不同的参考FlightFileAccess
我们也使用不同的参考RandomAccessFile
?
这意味着,有FlightFileAccess
静态服务不会成为这里synchronize
在RandomAccessFile
,因为它是每次所以每个DataflightsService
实例将做随机访问的文件忽略了同步他们的事一个新的。与在静态启动器中实例化FlightFileAccess
相反。我对吗?
我会尽可能多的解释,以提供最好的方式来实例化DataflightsService
多少倍(我们可以说想象每个客户端都有自己的实例DataflightsService
),然后才能够同步在一个文件中删除例如,以便没有几个客户访问该文件的混乱。对不起,我需要为每个客户端添加一个DataflightsService
bc没有cookie。
请编辑您的问题,并将代码格式化为代码,并将其缩进。 – 2015-04-03 15:47:10
仅仅因为你在一本书中找到了建议,这并不会自动提供建议。构造函数无条件地分配一个静态字段?这听起来像严重不好的设计。 – 2015-04-03 17:09:40