mirror of https://github.com/apache/cloudstack.git
487 lines
20 KiB
HTML
Executable File
487 lines
20 KiB
HTML
Executable File
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<!--NewPage-->
|
|
<HTML>
|
|
<HEAD>
|
|
<!-- Generated by javadoc (build 1.5.0_13) on Sun Jul 13 13:05:40 EST 2008 -->
|
|
<TITLE>
|
|
Mutex (ehcache)
|
|
</TITLE>
|
|
|
|
<META NAME="keywords" CONTENT="net.sf.ehcache.constructs.concurrent.Mutex class">
|
|
|
|
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
|
|
|
|
<SCRIPT type="text/javascript">
|
|
function windowTitle()
|
|
{
|
|
parent.document.title="Mutex (ehcache)";
|
|
}
|
|
</SCRIPT>
|
|
<NOSCRIPT>
|
|
</NOSCRIPT>
|
|
|
|
</HEAD>
|
|
|
|
<BODY BGCOLOR="white" onload="windowTitle();">
|
|
|
|
|
|
<!-- ========= START OF TOP NAVBAR ======= -->
|
|
<A NAME="navbar_top"><!-- --></A>
|
|
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
|
|
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
|
|
<TR>
|
|
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
|
|
<A NAME="navbar_top_firstrow"><!-- --></A>
|
|
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
|
|
<TR ALIGN="center" VALIGN="top">
|
|
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
|
|
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
|
|
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
|
|
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Mutex.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
|
|
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
|
|
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
|
|
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
|
|
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
|
|
</TR>
|
|
</TABLE>
|
|
</TD>
|
|
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
|
|
<a href="/" target="_top">ehcache</a></EM>
|
|
</TD>
|
|
</TR>
|
|
|
|
<TR>
|
|
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
|
|
<A HREF="../../../../../net/sf/ehcache/constructs/concurrent/ConcurrencyUtil.html" title="class in net.sf.ehcache.constructs.concurrent"><B>PREV CLASS</B></A>
|
|
<A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html" title="interface in net.sf.ehcache.constructs.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
|
|
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
|
|
<A HREF="../../../../../index.html?net/sf/ehcache/constructs/concurrent/Mutex.html" target="_top"><B>FRAMES</B></A>
|
|
<A HREF="Mutex.html" target="_top"><B>NO FRAMES</B></A>
|
|
<SCRIPT type="text/javascript">
|
|
<!--
|
|
if(window==top) {
|
|
document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
|
|
}
|
|
//-->
|
|
</SCRIPT>
|
|
<NOSCRIPT>
|
|
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
|
|
</NOSCRIPT>
|
|
|
|
|
|
</FONT></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
|
|
SUMMARY: NESTED | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
|
|
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
|
|
DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
|
|
</TR>
|
|
</TABLE>
|
|
<A NAME="skip-navbar_top"></A>
|
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
|
|
|
<HR>
|
|
<!-- ======== START OF CLASS DATA ======== -->
|
|
<H2>
|
|
<FONT SIZE="-1">
|
|
net.sf.ehcache.constructs.concurrent</FONT>
|
|
<BR>
|
|
Class Mutex</H2>
|
|
<PRE>
|
|
java.lang.Object
|
|
<IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>net.sf.ehcache.constructs.concurrent.Mutex</B>
|
|
</PRE>
|
|
<DL>
|
|
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html" title="interface in net.sf.ehcache.constructs.concurrent">Sync</A></DD>
|
|
</DL>
|
|
<HR>
|
|
<DL>
|
|
<DT><PRE>public class <B>Mutex</B><DT>extends java.lang.Object<DT>implements <A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html" title="interface in net.sf.ehcache.constructs.concurrent">Sync</A></DL>
|
|
</PRE>
|
|
|
|
<P>
|
|
<DL>
|
|
<DT><B>Version:</B></DT>
|
|
<DD>$Id: Mutex.java 519 2007-07-27 07:11:45Z gregluck $</DD>
|
|
<DT><B>Author:</B></DT>
|
|
<DD>Doug Lea
|
|
A simple non-reentrant mutual exclusion lock.
|
|
The lock is free upon construction. Each acquire gets the
|
|
lock, and each release frees it. Releasing a lock that
|
|
is already free has no effect.
|
|
<p/>
|
|
This implementation makes no attempt to provide any fairness
|
|
or ordering guarantees. If you need them, consider using one of
|
|
the Semaphore implementations as a locking mechanism.
|
|
<p/>
|
|
<b>Sample usage</b><br>
|
|
<p/>
|
|
Mutex can be useful in constructions that cannot be
|
|
expressed using java synchronized blocks because the
|
|
acquire/release pairs do not occur in the same method or
|
|
code block. For example, you can use them for hand-over-hand
|
|
locking across the nodes of a linked list. This allows
|
|
extremely fine-grained locking, and so increases
|
|
potential concurrency, at the cost of additional complexity and
|
|
overhead that would normally make this worthwhile only in cases of
|
|
extreme contention.
|
|
<pre>
|
|
class Node {
|
|
Object item;
|
|
Node next;
|
|
Mutex lock = new Mutex(); // each node keeps its own lock
|
|
<p/>
|
|
Node(Object x, Node n) { item = x; next = n; }
|
|
}
|
|
<p/>
|
|
class List {
|
|
protected Node head; // pointer to first node of list
|
|
<p/>
|
|
// Use plain java synchronization to protect head field.
|
|
// (We could instead use a Mutex here too but there is no
|
|
// reason to do so.)
|
|
protected synchronized Node getHead() { return head; }
|
|
<p/>
|
|
boolean search(Object x) throws InterruptedException {
|
|
Node p = getHead();
|
|
if (p == null) return false;
|
|
<p/>
|
|
// (This could be made more compact, but for clarity of illustration,
|
|
// all of the cases that can arise are handled separately.)
|
|
<p/>
|
|
p.lock.acquire(); // Prime loop by acquiring first lock.
|
|
// (If the acquire fails due to
|
|
// interrupt, the method will throw
|
|
// InterruptedException now,
|
|
// so there is no need for any
|
|
// further cleanup.)
|
|
for (;;) {
|
|
if (x.equals(p.item)) {
|
|
p.lock.release(); // release current before return
|
|
return true;
|
|
}
|
|
else {
|
|
Node nextp = p.next;
|
|
if (nextp == null) {
|
|
p.lock.release(); // release final lock that was held
|
|
return false;
|
|
}
|
|
else {
|
|
try {
|
|
nextp.lock.acquire(); // get next lock before releasing current
|
|
}
|
|
catch (InterruptedException ex) {
|
|
p.lock.release(); // also release current if acquire fails
|
|
throw ex;
|
|
}
|
|
p.lock.release(); // release old lock now that new one held
|
|
p = nextp;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
<p/>
|
|
synchronized void add(Object x) { // simple prepend
|
|
// The use of `synchronized' here protects only head field.
|
|
// The method does not need to wait out other traversers
|
|
// who have already made it past head.
|
|
<p/>
|
|
head = new Node(x, head);
|
|
}
|
|
<p/>
|
|
// ... other similar traversal and update methods ...
|
|
}
|
|
</pre>
|
|
<p/>
|
|
<p>[<a href="http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html"> Introduction to this package. </a>]</DD>
|
|
</DL>
|
|
<HR>
|
|
|
|
<P>
|
|
<!-- =========== FIELD SUMMARY =========== -->
|
|
|
|
<A NAME="field_summary"><!-- --></A>
|
|
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
|
|
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
|
|
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
|
|
<B>Field Summary</B></FONT></TH>
|
|
</TR>
|
|
<TR BGCOLOR="white" CLASS="TableRowColor">
|
|
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
|
|
<CODE>protected boolean</CODE></FONT></TD>
|
|
<TD><CODE><B><A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Mutex.html#inUse">inUse</A></B></CODE>
|
|
|
|
<BR>
|
|
The lock status *</TD>
|
|
</TR>
|
|
</TABLE>
|
|
<A NAME="fields_inherited_from_class_net.sf.ehcache.constructs.concurrent.Sync"><!-- --></A>
|
|
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
|
|
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
|
|
<TH ALIGN="left"><B>Fields inherited from interface net.sf.ehcache.constructs.concurrent.<A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html" title="interface in net.sf.ehcache.constructs.concurrent">Sync</A></B></TH>
|
|
</TR>
|
|
<TR BGCOLOR="white" CLASS="TableRowColor">
|
|
<TD><CODE><A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html#ONE_CENTURY">ONE_CENTURY</A>, <A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html#ONE_DAY">ONE_DAY</A>, <A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html#ONE_HOUR">ONE_HOUR</A>, <A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html#ONE_MINUTE">ONE_MINUTE</A>, <A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html#ONE_SECOND">ONE_SECOND</A>, <A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html#ONE_WEEK">ONE_WEEK</A>, <A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html#ONE_YEAR">ONE_YEAR</A></CODE></TD>
|
|
</TR>
|
|
</TABLE>
|
|
|
|
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
|
|
|
|
<A NAME="constructor_summary"><!-- --></A>
|
|
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
|
|
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
|
|
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
|
|
<B>Constructor Summary</B></FONT></TH>
|
|
</TR>
|
|
<TR BGCOLOR="white" CLASS="TableRowColor">
|
|
<TD><CODE><B><A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Mutex.html#Mutex()">Mutex</A></B>()</CODE>
|
|
|
|
<BR>
|
|
</TD>
|
|
</TR>
|
|
</TABLE>
|
|
|
|
<!-- ========== METHOD SUMMARY =========== -->
|
|
|
|
<A NAME="method_summary"><!-- --></A>
|
|
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
|
|
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
|
|
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
|
|
<B>Method Summary</B></FONT></TH>
|
|
</TR>
|
|
<TR BGCOLOR="white" CLASS="TableRowColor">
|
|
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
|
|
<CODE> void</CODE></FONT></TD>
|
|
<TD><CODE><B><A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Mutex.html#acquire()">acquire</A></B>()</CODE>
|
|
|
|
<BR>
|
|
Wait (possibly forever) until successful passage.</TD>
|
|
</TR>
|
|
<TR BGCOLOR="white" CLASS="TableRowColor">
|
|
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
|
|
<CODE> boolean</CODE></FONT></TD>
|
|
<TD><CODE><B><A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Mutex.html#attempt(long)">attempt</A></B>(long msecs)</CODE>
|
|
|
|
<BR>
|
|
Wait at most msecs to pass; report whether passed.</TD>
|
|
</TR>
|
|
<TR BGCOLOR="white" CLASS="TableRowColor">
|
|
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
|
|
<CODE> void</CODE></FONT></TD>
|
|
<TD><CODE><B><A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Mutex.html#release()">release</A></B>()</CODE>
|
|
|
|
<BR>
|
|
Potentially enable others to pass.</TD>
|
|
</TR>
|
|
</TABLE>
|
|
<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
|
|
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
|
|
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
|
|
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
|
|
</TR>
|
|
<TR BGCOLOR="white" CLASS="TableRowColor">
|
|
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
|
|
</TR>
|
|
</TABLE>
|
|
|
|
<P>
|
|
|
|
<!-- ============ FIELD DETAIL =========== -->
|
|
|
|
<A NAME="field_detail"><!-- --></A>
|
|
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
|
|
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
|
|
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
|
|
<B>Field Detail</B></FONT></TH>
|
|
</TR>
|
|
</TABLE>
|
|
|
|
<A NAME="inUse"><!-- --></A><H3>
|
|
inUse</H3>
|
|
<PRE>
|
|
protected boolean <B>inUse</B></PRE>
|
|
<DL>
|
|
<DD>The lock status *
|
|
<P>
|
|
<DL>
|
|
</DL>
|
|
</DL>
|
|
|
|
<!-- ========= CONSTRUCTOR DETAIL ======== -->
|
|
|
|
<A NAME="constructor_detail"><!-- --></A>
|
|
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
|
|
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
|
|
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
|
|
<B>Constructor Detail</B></FONT></TH>
|
|
</TR>
|
|
</TABLE>
|
|
|
|
<A NAME="Mutex()"><!-- --></A><H3>
|
|
Mutex</H3>
|
|
<PRE>
|
|
public <B>Mutex</B>()</PRE>
|
|
<DL>
|
|
</DL>
|
|
|
|
<!-- ============ METHOD DETAIL ========== -->
|
|
|
|
<A NAME="method_detail"><!-- --></A>
|
|
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
|
|
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
|
|
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
|
|
<B>Method Detail</B></FONT></TH>
|
|
</TR>
|
|
</TABLE>
|
|
|
|
<A NAME="acquire()"><!-- --></A><H3>
|
|
acquire</H3>
|
|
<PRE>
|
|
public void <B>acquire</B>()
|
|
throws java.lang.InterruptedException</PRE>
|
|
<DL>
|
|
<DD>Wait (possibly forever) until successful passage.
|
|
Fail only upon interuption. Interruptions always result in
|
|
`clean' failures. On failure, you can be sure that it has not
|
|
been acquired, and that no
|
|
corresponding release should be performed. Conversely,
|
|
a normal return guarantees that the acquire was successful.
|
|
<P>
|
|
<DD><DL>
|
|
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html#acquire()">acquire</A></CODE> in interface <CODE><A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html" title="interface in net.sf.ehcache.constructs.concurrent">Sync</A></CODE></DL>
|
|
</DD>
|
|
<DD><DL>
|
|
|
|
<DT><B>Throws:</B>
|
|
<DD><CODE>java.lang.InterruptedException</CODE><DT><B>See Also:</B><DD><A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html#acquire()"><CODE>Sync.acquire()</CODE></A></DL>
|
|
</DD>
|
|
</DL>
|
|
<HR>
|
|
|
|
<A NAME="attempt(long)"><!-- --></A><H3>
|
|
attempt</H3>
|
|
<PRE>
|
|
public boolean <B>attempt</B>(long msecs)
|
|
throws java.lang.InterruptedException</PRE>
|
|
<DL>
|
|
<DD><B>Description copied from interface: <CODE><A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html#attempt(long)">Sync</A></CODE></B></DD>
|
|
<DD>Wait at most msecs to pass; report whether passed.
|
|
<p/>
|
|
The method has best-effort semantics:
|
|
The msecs bound cannot
|
|
be guaranteed to be a precise upper bound on wait time in Java.
|
|
Implementations generally can only attempt to return as soon as possible
|
|
after the specified bound. Also, timers in Java do not stop during garbage
|
|
collection, so timeouts can occur just because a GC intervened.
|
|
So, msecs arguments should be used in
|
|
a coarse-grained manner. Further,
|
|
implementations cannot always guarantee that this method
|
|
will return at all without blocking indefinitely when used in
|
|
unintended ways. For example, deadlocks may be encountered
|
|
when called in an unintended context.
|
|
<p/>
|
|
<P>
|
|
<DD><DL>
|
|
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html#attempt(long)">attempt</A></CODE> in interface <CODE><A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html" title="interface in net.sf.ehcache.constructs.concurrent">Sync</A></CODE></DL>
|
|
</DD>
|
|
<DD><DL>
|
|
<DT><B>Parameters:</B><DD><CODE>msecs</CODE> - the number of milleseconds to wait.
|
|
An argument less than or equal to zero means not to wait at all.
|
|
However, this may still require
|
|
access to a synchronization lock, which can impose unbounded
|
|
delay if there is a lot of contention among threads.
|
|
<DT><B>Returns:</B><DD>true if acquired
|
|
<DT><B>Throws:</B>
|
|
<DD><CODE>java.lang.InterruptedException</CODE><DT><B>See Also:</B><DD><A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html#attempt(long)"><CODE>Sync.attempt(long)</CODE></A></DL>
|
|
</DD>
|
|
</DL>
|
|
<HR>
|
|
|
|
<A NAME="release()"><!-- --></A><H3>
|
|
release</H3>
|
|
<PRE>
|
|
public void <B>release</B>()</PRE>
|
|
<DL>
|
|
<DD>Potentially enable others to pass.
|
|
<p/>
|
|
Because release does not raise exceptions,
|
|
it can be used in `finally' clauses without requiring extra
|
|
embedded try/catch blocks. But keep in mind that
|
|
as with any java method, implementations may
|
|
still throw unchecked exceptions such as Error or NullPointerException
|
|
when faced with uncontinuable errors. However, these should normally
|
|
only be caught by higher-level error handlers.
|
|
<P>
|
|
<DD><DL>
|
|
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html#release()">release</A></CODE> in interface <CODE><A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html" title="interface in net.sf.ehcache.constructs.concurrent">Sync</A></CODE></DL>
|
|
</DD>
|
|
<DD><DL>
|
|
<DT><B>See Also:</B><DD><A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html#release()"><CODE>Sync.release()</CODE></A></DL>
|
|
</DD>
|
|
</DL>
|
|
<!-- ========= END OF CLASS DATA ========= -->
|
|
<HR>
|
|
|
|
|
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
|
<A NAME="navbar_bottom"><!-- --></A>
|
|
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
|
|
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
|
|
<TR>
|
|
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
|
|
<A NAME="navbar_bottom_firstrow"><!-- --></A>
|
|
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
|
|
<TR ALIGN="center" VALIGN="top">
|
|
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
|
|
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
|
|
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
|
|
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Mutex.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
|
|
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
|
|
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
|
|
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
|
|
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
|
|
</TR>
|
|
</TABLE>
|
|
</TD>
|
|
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
|
|
<a href="/" target="_top">ehcache</a></EM>
|
|
</TD>
|
|
</TR>
|
|
|
|
<TR>
|
|
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
|
|
<A HREF="../../../../../net/sf/ehcache/constructs/concurrent/ConcurrencyUtil.html" title="class in net.sf.ehcache.constructs.concurrent"><B>PREV CLASS</B></A>
|
|
<A HREF="../../../../../net/sf/ehcache/constructs/concurrent/Sync.html" title="interface in net.sf.ehcache.constructs.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
|
|
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
|
|
<A HREF="../../../../../index.html?net/sf/ehcache/constructs/concurrent/Mutex.html" target="_top"><B>FRAMES</B></A>
|
|
<A HREF="Mutex.html" target="_top"><B>NO FRAMES</B></A>
|
|
<SCRIPT type="text/javascript">
|
|
<!--
|
|
if(window==top) {
|
|
document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
|
|
}
|
|
//-->
|
|
</SCRIPT>
|
|
<NOSCRIPT>
|
|
<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
|
|
</NOSCRIPT>
|
|
|
|
|
|
</FONT></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
|
|
SUMMARY: NESTED | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
|
|
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
|
|
DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
|
|
</TR>
|
|
</TABLE>
|
|
<A NAME="skip-navbar_bottom"></A>
|
|
<!-- ======== END OF BOTTOM NAVBAR ======= -->
|
|
|
|
<HR>
|
|
|
|
</BODY>
|
|
</HTML>
|