home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / java / util / lock.java < prev    next >
Text File  |  1995-08-11  |  3KB  |  86 lines

  1. /*
  2.  * @(#)Lock.java    1.7 95/01/31  
  3.  *
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Permission to use, copy, modify, and distribute this software
  7.  * and its documentation for NON-COMMERCIAL purposes and without
  8.  * fee is hereby granted provided that this copyright notice
  9.  * appears in all copies. Please refer to the file "copyright.html"
  10.  * for further important copyright and licensing information.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  13.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  14.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  15.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  16.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  17.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  18.  */
  19.  
  20. package java.util;
  21.  
  22. /**
  23.  * The Lock class provides a simple, useful interface to a lock.
  24.  * Unlike monitors which synchronize access to an object, locks
  25.  * synchronize access to an arbitrary set of resources (objects,
  26.  * methods, variables, etc.). <p>
  27.  *
  28.  * The programmer using locks must be responsible for clearly defining
  29.  * the semantics of their use and should handle deadlock avoidance in
  30.  * the face of exceptions. <p>
  31.  *
  32.  * For example, if you want to protect a set of method invocations with
  33.  * a lock, and one of the methods may throw an exception, you must be
  34.  * prepared to release the lock similarly to the following example:
  35.  * <pre>
  36.  *    class SomeClass {
  37.  *        Lock myLock = new Lock();
  38.  
  39.  *        void someMethod() {
  40.  *            myLock.lock();
  41.  *        try {
  42.  *                StartOperation();
  43.  *            ContinueOperation();
  44.  *            EndOperation();
  45.  *        } finally {
  46.  *                myLock.unlock();
  47.  *        }
  48.  *        }
  49.  *    }
  50.  * </pre>
  51.  *
  52.  * @version     1.7, 31 Jan 1995
  53.  * @author     Peter King
  54.  */
  55. public
  56. class Lock {
  57.     private boolean locked = false;
  58.  
  59.     /**
  60.      * Create a lock, which is initially not locked.
  61.      */
  62.     public Lock () {
  63.     }
  64.  
  65.     /**
  66.      * Acquire the lock.  If someone else has the lock, wait until it
  67.      * has been freed, and then try to acquire it again.  This method
  68.      * will not return until the lock has been acquired.
  69.      */
  70.     public final synchronized void lock() {
  71.     while (locked) {
  72.         wait();
  73.     }
  74.     locked = true;
  75.     }
  76.  
  77.     /**
  78.      * Release the lock.  If someone else is waiting for the lock, the
  79.      * will be notitified so they can try to acquire the lock again.
  80.      */
  81.     public final synchronized void unlock() {
  82.     locked = false;
  83.     notifyAll();
  84.     }
  85. }
  86.