Just
like synchronized methods and synchronized blocks, Lock provides
synchronization mechanism. Lock implementations provide more
extensive locking operations than synchronized methods and blocks.
ReentrantLock, ReentrantReadWriteLock.ReadLock, ReentrantReadWriteLock.WriteLock implements Lock interface.
Methods in Lock interface
ReentrantLock, ReentrantReadWriteLock.ReadLock, ReentrantReadWriteLock.WriteLock implements Lock interface.
Methods in Lock interface
Method | Description |
void lock() | Acquires the lock. If the lock is not available then the current thread becomes disabled for thread scheduling purposes and lies dormant until the lock has been acquired. |
void lockInterruptibly() | Acquires the lock if it is
available and returns immediately. If the lock is not available
then the current thread becomes disabled for thread scheduling
purposes and lies dormant until one of two things happens: a. The lock is acquired by the current thread; or b. Some other thread interrupts the current thread, and interruption of lock acquisition is supported. |
Condition newCondition() | Returns a new Condition instance that is bound to this Lock instance. |
boolean tryLock() | Acquires the lock only if it is free at the time of invocation. Returns true if the lock was acquired and false otherwise. |
boolean tryLock(long time, TimeUnit unit) | Acquires the lock if it is free within the given waiting time and the current thread has not been interrupted. Returns true if the lock was acquired and false if the waiting time elapsed before the lock was acquired. |
void unlock() | Releases the lock. |
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.TimeUnit; public class Task implements Runnable{ int taskNum; static Lock myLock = new ReentrantLock(); Task(int taskNum){ this.taskNum = taskNum; } @Override public void run(){ myLock.lock(); try { System.out.println(taskNum +" Started "); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException ex) { } System.out.println(taskNum +" Finished "); } finally { myLock.unlock(); } } }
public class LockEx { public static void main(String args[]){ int taskNum = 1; while(taskNum < 50){ Task task = new Task(taskNum); new Thread(task).start(); taskNum++; } } }
Output
1 Started 1 Finished 2 Started 2 Finished 3 Started 3 Finished 4 Started 4 Finished 6 Started 6 Finished 5 Started 5 Finished … … …
Prevoius Next Home
No comments:
Post a Comment