reentrantlock.html
来自「j2se5-api-zh,java文档的中文版本」· HTML 代码 · 共 937 行 · 第 1/3 页
HTML
937 行
<!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_03) on Wed Nov 02 09:51:59 CST 2005 --><META http-equiv="Content-Type" content="text/html; charset=gb2312"><TITLE>ReentrantLock (Java 2 Platform SE 5.0)</TITLE><META NAME="keywords" CONTENT="java.util.concurrent.locks.ReentrantLock class"><LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style"><SCRIPT type="text/javascript">function windowTitle(){ parent.document.title="ReentrantLock (Java 2 Platform SE 5.0)";}</SCRIPT><NOSCRIPT></NOSCRIPT></HEAD><BODY BGCOLOR="white" onload="windowTitle();"><!-- ========= START OF TOP NAVBAR ======= --><A NAME="navbar_top"><!-- --></A><A HREF="#skip-navbar_top" title="跳过导航链接"></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>概述</B></FONT></A> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>软件包</B></FONT></A> </TD> <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>类</B></FONT> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ReentrantLock.html"><FONT CLASS="NavBarFont1"><B>使用</B></FONT></A> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>树</B></FONT></A> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>已过时</B></FONT></A> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>索引</B></FONT></A> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>帮助</B></FONT></A> </TD> </TR></TABLE></TD><TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM><b>Java<sup><font size=-2>TM</font></sup> 2 Platform<br>Standard Ed. 5.0</b></EM></TD></TR><TR><TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> <A HREF="ReadWriteLock.html" title="java.util.concurrent.locks 中的接口"><B>上一个类</B></A> <A HREF="ReentrantReadWriteLock.html" title="java.util.concurrent.locks 中的类"><B>下一个类</B></A></FONT></TD><TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> <A HREF="../../../../index.html@java_2Futil_2Fconcurrent_2Flocks_2FReentrantLock.html" target="_top"><B>框架</B></A> <A HREF="ReentrantLock.html" target="_top"><B>无框架</B></A> <SCRIPT type="text/javascript"> <!-- if(window==top) { document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>所有类</B></A>'); } //--></SCRIPT><NOSCRIPT> <A HREF="../../../../allclasses-noframe.html"><B>所有类</B></A></NOSCRIPT></FONT></TD></TR><TR><TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> 摘要: 嵌套 | 字段 | <A HREF="#constructor_summary">构造方法</A> | <A HREF="#method_summary">方法</A></FONT></TD><TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">详细信息: 字段 | <A HREF="#constructor_detail">构造方法</A> | <A HREF="#method_detail">方法</A></FONT></TD></TR></TABLE><A NAME="skip-navbar_top"></A><!-- ========= END OF TOP NAVBAR ========= --><HR><!-- ======== START OF CLASS DATA ======== --><H2><FONT SIZE="-1">java.util.concurrent.locks</FONT><BR>类 ReentrantLock</H2><PRE><A HREF="../../../lang/Object.html" title="java.lang 中的类">java.lang.Object</A> <IMG SRC="../../../../resources/inherit.gif" ALT="继承者 "><B>java.util.concurrent.locks.ReentrantLock</B></PRE><DL><DT><B>所有已实现的接口:</B> <DD>java.io.Serializable, <A HREF="Lock.html" title="java.util.concurrent.locks 中的接口">Lock</A></DD></DL><HR><DL><DT><PRE>public class <B>ReentrantLock</B><DT>extends <A HREF="../../../lang/Object.html" title="java.lang 中的类">Object</A><DT>implements <A HREF="Lock.html" title="java.util.concurrent.locks 中的接口">Lock</A>, java.io.Serializable</DL></PRE><P>一个可重入的互斥锁定 <A HREF="Lock.html" title="java.util.concurrent.locks 中的接口"><CODE>Lock</CODE></A>,它具有与使用 <tt>synchronized</tt> 方法和语句所访问的隐式监视器锁定相同的一些基本行为和语义,但功能更强大。<p> <tt>ReentrantLock</tt> 将由最近成功获得锁定,并且还没有释放该锁定的线程所<em>拥有</em>。当锁定没有被另一个线程所拥有时,调用 <tt>lock</tt> 的线程将成功获取该锁定并返回。如果当前线程已经拥有该锁定,此方法将立即返回。可以使用 <A HREF="ReentrantLock.html#isHeldByCurrentThread()"><CODE>isHeldByCurrentThread()</CODE></A> 和 <A HREF="ReentrantLock.html#getHoldCount()"><CODE>getHoldCount()</CODE></A> 方法来检查此情况是否发生。 <p> 此类的构造方法接受一个可选的<em>公平</em> 参数。当设置为 <tt>true</tt> 时,在多个线程的争用下,这些锁定倾向于将访问权授予等待时间最长的线程。否则此锁定将无法保证任何特定访问顺序。与采用默认设置(使用不公平锁定)相比,使用公平锁定的程序在许多线程访问时表现为很低的总体吞吐量(即速度很慢,常常极其慢),但是在获得锁定和保证锁定分配的均衡性时差异较小。不过要注意的是,公平锁定不能保证线程调度的公平性。因此,使用公平锁定的众多线程中的一员可能获得多倍的成功机会,这种情况发生在其他活动线程没有被处理并且目前并未持有锁定时。还要注意的是,未定时的 <A HREF="ReentrantLock.html#tryLock()"><CODE>tryLock</CODE></A> 方法并没有使用公平设置。因为即使其他线程正在等待,只要该锁定是可用的,此方法就可以获得成功。<p> 建议<em>总是</em> 立即实践,使用 <tt>try</tt> 块来调用 <tt>lock</tt>,在之前/之后的构造中,最典型的代码如下: <pre> class X { private final ReentrantLock lock = new ReentrantLock(); // ... public void m() { lock.lock(); // block until condition holds try { // ... method body } finally { lock.unlock() } } } </pre><p>除了实现 <A HREF="Lock.html" title="java.util.concurrent.locks 中的接口"><CODE>Lock</CODE></A> 接口,此类还定义了 <tt>isLocked</tt> 和 <tt>getLockQueueLength</tt> 方法,以及一些相关的 <tt>protected</tt> 访问方法,这些方法对检测和监视可能很有用。<p> 该类的序列化与内置锁定的行为方式相同:一个反序列化的锁定处于解除锁定状态,不管它被序列化时的状态是怎样的。<p> 此锁定最多支持同一个线程发起的 2147483648 个递归锁定。<P><P><DL><DT><B>从以下版本开始:</B></DT> <DD>1.5</DD><DT><B>另请参见:</B><DD><A HREF="../../../../serialized-form.html#java.util.concurrent.locks.ReentrantLock">序列化表格</A></DL><HR><P><!-- ======== 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>构造方法摘要</B></FONT></TH></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD><CODE><B><A HREF="ReentrantLock.html#ReentrantLock()">ReentrantLock</A></B>()</CODE><BR> 创建一个 <tt>ReentrantLock</tt> 的实例。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD><CODE><B><A HREF="ReentrantLock.html#ReentrantLock(boolean)">ReentrantLock</A></B>(boolean fair)</CODE><BR> 创建一个具有给定公平策略的 <tt>ReentrantLock</tt>。</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>方法摘要</B></FONT></TH></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE> int</CODE></FONT></TD><TD><CODE><B><A HREF="ReentrantLock.html#getHoldCount()">getHoldCount</A></B>()</CODE><BR> 查询当前线程保持此锁定的次数。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE>protected <A HREF="../../../lang/Thread.html" title="java.lang 中的类">Thread</A></CODE></FONT></TD><TD><CODE><B><A HREF="ReentrantLock.html#getOwner()">getOwner</A></B>()</CODE><BR> 返回目前拥有此锁定的线程,如果此锁定不被任何线程拥有,则返回 <tt>null</tt>。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE>protected <A HREF="../../Collection.html" title="java.util 中的接口">Collection</A><<A HREF="../../../lang/Thread.html" title="java.lang 中的类">Thread</A>></CODE></FONT></TD><TD><CODE><B><A HREF="ReentrantLock.html#getQueuedThreads()">getQueuedThreads</A></B>()</CODE><BR> 返回一个 collection,它包含可能正等待获取此锁定的线程。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE> int</CODE></FONT></TD><TD><CODE><B><A HREF="ReentrantLock.html#getQueueLength()">getQueueLength</A></B>()</CODE><BR> 返回正等待获取此锁定的线程估计数。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE>protected <A HREF="../../Collection.html" title="java.util 中的接口">Collection</A><<A HREF="../../../lang/Thread.html" title="java.lang 中的类">Thread</A>></CODE></FONT></TD><TD><CODE><B><A HREF="ReentrantLock.html#getWaitingThreads(java.util.concurrent.locks.Condition)">getWaitingThreads</A></B>(<A HREF="Condition.html" title="java.util.concurrent.locks 中的接口">Condition</A> condition)</CODE><BR> 返回一个 collection,它包含可能正在等待与此锁定相关给定条件的那些线程。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE> int</CODE></FONT></TD><TD><CODE><B><A HREF="ReentrantLock.html#getWaitQueueLength(java.util.concurrent.locks.Condition)">getWaitQueueLength</A></B>(<A HREF="Condition.html" title="java.util.concurrent.locks 中的接口">Condition</A> condition)</CODE><BR> 返回等待与此锁定相关的给定条件的线程估计数。</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="ReentrantLock.html#hasQueuedThread(java.lang.Thread)">hasQueuedThread</A></B>(<A HREF="../../../lang/Thread.html" title="java.lang 中的类">Thread</A> thread)</CODE><BR> 查询给定线程是否正在等待获取此锁定。</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="ReentrantLock.html#hasQueuedThreads()">hasQueuedThreads</A></B>()</CODE><BR> 查询是否有些线程正在等待获取此锁定。</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="ReentrantLock.html#hasWaiters(java.util.concurrent.locks.Condition)">hasWaiters</A></B>(<A HREF="Condition.html" title="java.util.concurrent.locks 中的接口">Condition</A> condition)</CODE><BR> 查询是否有些线程正在等待与此锁定有关的给定条件。</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="ReentrantLock.html#isFair()">isFair</A></B>()</CODE><BR> 如果此锁定的公平设置为 true,则返回 true。</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="ReentrantLock.html#isHeldByCurrentThread()">isHeldByCurrentThread</A></B>()</CODE><BR> 查询当前线程是否保持此锁定。</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="ReentrantLock.html#isLocked()">isLocked</A></B>()</CODE><BR> 查询此锁定是否由任意线程保持。</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="ReentrantLock.html#lock()">lock</A></B>()</CODE><BR> 获取锁定。</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="ReentrantLock.html#lockInterruptibly()">lockInterruptibly</A></B>()</CODE><BR> 如果当前线程未被<A HREF="../../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>,则获取锁定。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE> <A HREF="Condition.html" title="java.util.concurrent.locks 中的接口">Condition</A></CODE></FONT></TD><TD><CODE><B><A HREF="ReentrantLock.html#newCondition()">newCondition</A></B>()</CODE><BR> 返回用来与此 <A HREF="Lock.html" title="java.util.concurrent.locks 中的接口"><CODE>Lock</CODE></A> 实例一起使用的 <A HREF="Condition.html" title="java.util.concurrent.locks 中的接口"><CODE>Condition</CODE></A> 实例。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE> <A HREF="../../../lang/String.html" title="java.lang 中的类">String</A></CODE></FONT></TD><TD><CODE><B><A HREF="ReentrantLock.html#toString()">toString</A></B>()</CODE><BR> 返回标识此锁定及其锁定状态的字符串。</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="ReentrantLock.html#tryLock()">tryLock</A></B>()</CODE><BR> 仅在调用时锁定未被另一个线程保持的情况下,才获取该锁定。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE> boolean</CODE></FONT></TD>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?