That sounds like a lot of clients.
Are you trying to run them all at the same time?
What OS is your server running on?
Any chance you are getting bounced because you are trying to open too many connections? Even if you stop your program and then restart, do you somehow disconnect gracefully, or do you leave the server hanging thinking you are still there? I don't know how all that is handled, but with massive amounts of clients, I could see something like that happening if the server never knew anyone was dropping out and you just kept adding more connections. Does it work again if you restart the server and then reconnect your clients?
If yes, how did you implement lock and unlock in Data ?
Notice that that sentence is a "must" one. What about implementating them by delegating their job to your LockManager ?
Do you have a requirement to lock the entire database? If not, then I would remove the entire method which locks the database.
If you do have a requirement to lock the entire database, then what is the logical outcome if the database is locked? Should a client be able to get a lock on an individual record while the entire database is locked? Do you prevent this from happening?
What is your "recordLocker" object?
I presume that this lock() method is in your LockManager. Is it being called by lock() in your Data class?
Which instructions did you get (including version number) ?
It's the first time I read this lock() method signature here :
"public void lock(int recNo, Object recordLocker) throws Exception".
What's the Object recordLocker parameter that you never use BTW ?
THis said, and reviewing your code, it seems OK to me, except the useless synchronized (lockMap) block in your isLocked method.