أنشئ حسابًا أو سجّل الدخول للانضمام إلى مجتمعك المهني.
java.util.concurrent api provides a class called as Lock, which would basically serializes the conntrol in order to access the critical resource.
If you're simply locking an object, I'd prefer to use synchronized
Example:
Lock.acquire(); doSomethingNifty();// Throws a NPE!Lock.release();// Oh noes, we never release the lock!You have to explicitly do try{} finally{} everywhere.
Whereas with synchronized, it's super clear and impossible to get wrong:
synchronized(myObject){ doSomethingNifty();}That said, Locks may be more useful for more complicated things where you can't acquire and release in such a clean manner. I would honestly prefer to avoid using bare Locks in the first place, and just go with a more sophisticated concurrency control such as a CyclicBarrier or a LinkedBlockingQueue, if they meet your needs.
I've never had a reason to use wait() or notify() but there may be some good ones.