KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > oddjob > util > Lock


1 package org.oddjob.util;
2
3 import org.oddjob.OddjobException;
4
5
6 /**
7  * A simple lock that only allows access to a segment of code to
8  * one thread at a time. The exclued thread return rather than
9  * being blocked.
10  *
11  * @author Rob Gordon
12  */

13
14 public class Lock {
15
16     private Thread JavaDoc lockedBy;
17     private String JavaDoc reason;
18     private int nests;
19     
20     /**
21      * Lock the lock.
22      *
23      */

24     
25     synchronized public void accquire(String JavaDoc reason)
26     throws OddjobLockedException {
27         if (lockedBy == null) {
28             lockedBy = Thread.currentThread();
29             this.reason = reason;
30         }
31         else if (lockedBy != Thread.currentThread()) {
32             throw new OddjobLockedException(this.reason);
33         }
34         ++nests;
35     }
36     
37     /**
38      * Unlock the lock.
39      */

40     
41     synchronized public void release() {
42         if (lockedBy != Thread.currentThread()) {
43             throw new OddjobException("Thread doesn't own lock.");
44         }
45         if (--nests == 0) {
46             lockedBy = null;
47             reason = null;
48         }
49     }
50     
51 }
52
Popular Tags