blob: 65eab64d75edd54bfec6176e98fad20855814d0a [file] [log] [blame]
/*
******************************************************************************
* Copyright (C) 2005-2008, International Business Machines Corporation and *
* others. All Rights Reserved. *
******************************************************************************
*/
package com.ibm.icu.dev.test.util;
/**
* Provides a flexible mechanism for controlling access, without requiring that a class be immutable.
* Once locked, an object can never be unlocked, so it is thread-safe from that point onward.
* The implementation of both methods must be synchronized.
* Once the object has been locked, it must guarantee that no changes can be made to it.
* Any attempt to alter it must raise an UnsupportedOperationException exception.
* This means that when the object returns internal objects,
* or if anyone has references to those internal objects, that those internal objects must either be immutable,
* or must also raise exceptions if any attempt to modify them is made. Of course, the object can return clones
* of internal objects, since those are safe. * @author davis
*/
public interface Lockable extends Cloneable {
/**
* Determines whether the object has been locked or not.
*/
public boolean isLocked();
/**
* Locks the object.
* @return the object itself.
*/
public Object lock();
/**
* Provides for the clone operation. Any clone is initially unlocked.
*/
public Object clone();
}