我希望服务器一次为一个客户端执行服务实现代码的某个部分,线程安全;并依次。这是执行此操作的服务器端服务实现的一部分:
public BorcData getBorcData(String userId) throws GeneralException, EyeksGwtException
{
StoredProcedure sp = DALDB.storedProcedure("BORCBILDIRIM_GETMUKDATA_SP");
DALResult spResult;
Row spRow;
String vergiNo;
String asamaOid;
synchronized (ServerUtility.lock_GeriArama_GetBorcData_GetMukDataSP)
{
String curOptime =CSDateUtility.getCurrentDateTimeToSave();
sp.addParam(curOptime);
spResult = sp.execute();
if (!spResult.hasNext())
{
throw new GeneralException("53", "");
}
}
您会看到同步块。我用于锁的对象定义为:
public static Object lock_GeriArama_GetBorcData_GetMukDataSP = new Object();
我的问题是:我想我看到当一个客户端等待执行该同步块很长时间时,其他一些客户端调用该服务并执行该块而没有排队并继续。第一个客户还在等待。
我知道服务器端运行纯 Java。服务器端是否可能对客户端不公平并且没有首先运行等待时间最长的客户端请求?
编辑:实际上;公平甚至不是真正的问题。有时客户看起来就像他们只是挂在那个同步部分;永远等待服务完成。