lock.html

来自「j2se5-api-zh,java文档的中文版本」· HTML 代码 · 共 443 行 · 第 1/2 页

HTML
443
字号
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2"><B>方法详细信息</B></FONT></TH></TR></TABLE><A NAME="lock()"><!-- --></A><H3>lock</H3><PRE>void <B>lock</B>()</PRE><DL><DD>获取锁定。<p>如果锁定不可用,出于线程调度目的,将禁用当前线程,并且在获得锁定之前,该线程将一直处于休眠状态。<p><b>实现注意事项</b><p><tt>Lock</tt> 实现可能可以检测锁定的错误用法,例如,某个调用可能导致死锁,在特定的环境中可能抛出(未经检查的)异常。该 <tt>Lock</tt> 实现必须对环境和异常类型进行记录。<P><DD><DL></DL></DD></DL><HR><A NAME="lockInterruptibly()"><!-- --></A><H3>lockInterruptibly</H3><PRE>void <B>lockInterruptibly</B>()                       throws <A HREF="../../../lang/InterruptedException.html" title="java.lang 中的类">InterruptedException</A></PRE><DL><DD>如果当前线程未被<A HREF="../../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>,则获取锁定。 <p>如果锁定可用,则获取锁定,并立即返回。<p>如果锁定不可用,出于线程调度目的,将禁用当前线程,并且在发生以下两种情况之一以前,该线程将一直处于休眠状态: <ul><li>锁定由当前线程获得;或者<li>其他某个线程<A HREF="../../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>当前线程,并且支持对锁定获取的中断。 </ul><p>如果当前线程: <ul><li>在进入此方法时已经设置了该线程的中断状态;或者<li>在获取锁定时被<A HREF="../../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>,并且支持对锁定获取的中断, </ul>则将抛出 <A HREF="../../../lang/InterruptedException.html" title="java.lang 中的类"><CODE>InterruptedException</CODE></A>,并清除当前线程的已中断状态。 <p><b>实现注意事项</b><p>在某些实现中可能无法中断锁定获取,即使可能,该操作的开销也很大。程序员应该知道可能会发生这种情况。在这种情况下,该实现应该对此进行记录。<p>相对于普通方法返回而言,实现可能更喜欢响应某个中断。<p><tt>Lock</tt> 实现可能可以检测锁定的错误用法,例如,某个调用可能导致死锁,在特定的环境中可能抛出(未经检查的)异常。该 <tt>Lock</tt> 实现必须对环境和异常类型进行记录。<P><DD><DL><DT><B>抛出:</B><DD><CODE><A HREF="../../../lang/InterruptedException.html" title="java.lang 中的类">InterruptedException</A></CODE> - 如果在获取锁定时,当前线程被中断(并且支持对锁定获取的中断)。<DT><B>另请参见:</B><DD><A HREF="../../../lang/Thread.html#interrupt()"><CODE>Thread.interrupt()</CODE></A></DL></DD></DL><HR><A NAME="tryLock()"><!-- --></A><H3>tryLock</H3><PRE>boolean <B>tryLock</B>()</PRE><DL><DD>仅在调用时锁定为空闲状态才获取该锁定。<p>如果锁定可用,则获取锁定,并立即返回值 <tt>true</tt>。如果锁定不可用,则此方法将立即返回值 <tt>false</tt>。<p>此方法的典型使用语句如下: <pre>      Lock lock = ...;      if (lock.tryLock()) {          try {              // manipulate protected state          } finally {              lock.unlock();          }      } else {          // perform alternative actions      } </pre>此用法可确保如果获取了锁定,则会释放锁定,如果未获取锁定,则不会试图将其释放。<P><DD><DL><DT><B>返回:</B><DD>如果获取了锁定,则返回 <tt>true</tt>;否则返回 <tt>false</tt>。</DL></DD></DL><HR><A NAME="tryLock(long, java.util.concurrent.TimeUnit)"><!-- --></A><H3>tryLock</H3><PRE>boolean <B>tryLock</B>(long&nbsp;time,                <A HREF="../TimeUnit.html" title="java.util.concurrent 中的枚举">TimeUnit</A>&nbsp;unit)                throws <A HREF="../../../lang/InterruptedException.html" title="java.lang 中的类">InterruptedException</A></PRE><DL><DD>如果锁定在给定的等待时间内空闲,并且当前线程未被<A HREF="../../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>,则获取锁定。<p>如果锁定可用,则此方法将立即返回值 <tt>true</tt>。如果锁定不可用,出于线程调度目的,将禁用当前线程,并且在发生以下三种情况之一前,该线程将一直处于休眠状态: <ul><li>锁定由当前线程获得;或者<li>其他某个线程<A HREF="../../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>当前线程,并且支持对锁定获取的中断;或者<li>已超过指定的等待时间 </ul><p>如果获得了锁定,则返回值 <tt>true</tt>。<p>如果当前线程: <ul><li>在进入此方法时已经设置了该线程的中断状态;或者<li>在获取锁定时被<A HREF="../../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>,并且支持对锁定获取的中断, </ul>则将抛出 <A HREF="../../../lang/InterruptedException.html" title="java.lang 中的类"><CODE>InterruptedException</CODE></A>,并会清除当前线程的已中断状态。 <p>如果超过了指定的等待时间,则将返回值 <tt>false</tt>。如果 time 小于或等于 0,该方法将完全不等待。<p><b>实现注意事项</b><p>在某些实现中可能无法中断锁定获取,即使可能,该操作的开销也很大。程序员应该知道可能会发生这种情况。在这种情况下,该实现应该对此进行记录。<p>相对于普通方法返回而言,实现可能更喜欢响应某个中断,或者报告出现超时情况。<p><tt>Lock</tt> 实现可能可以检测锁定的错误用法,例如,某个调用可能导致死锁,在特定的环境中可能抛出(未经检查的)异常。该 <tt>Lock</tt> 实现必须对环境和异常类型进行记录。<P><DD><DL><DT><B>参数:</B><DD><CODE>time</CODE> - 等待锁定的最长时间<DD><CODE>unit</CODE> - <tt>time</tt> 参数的时间单位。<DT><B>返回:</B><DD>如果获得了锁定,则返回 <tt>true</tt>;如果在获取锁定前超过了等待时间,则返回 <tt>false</tt>。<DT><B>抛出:</B><DD><CODE><A HREF="../../../lang/InterruptedException.html" title="java.lang 中的类">InterruptedException</A></CODE> - 如果在获取锁定时,当前线程被中断(并且支持对锁定获取的中断)。<DT><B>另请参见:</B><DD><A HREF="../../../lang/Thread.html#interrupt()"><CODE>Thread.interrupt()</CODE></A></DL></DD></DL><HR><A NAME="unlock()"><!-- --></A><H3>unlock</H3><PRE>void <B>unlock</B>()</PRE><DL><DD>释放锁定。<p><b>实现注意事项</b><p><tt>Lock</tt> 实现通常对哪个线程可以释放锁定施加了限制(通常只有锁定的保持者可以释放它),如果违背了这个限制,可能会抛出(未经检查的)异常。该 <tt>Lock</tt> 实现必须对所有限制和异常类型进行记录。<P><DD><DL></DL></DD></DL><HR><A NAME="newCondition()"><!-- --></A><H3>newCondition</H3><PRE><A HREF="Condition.html" title="java.util.concurrent.locks 中的接口">Condition</A> <B>newCondition</B>()</PRE><DL><DD>返回绑定到此 <tt>Lock</tt> 实例的新 <A HREF="Condition.html" title="java.util.concurrent.locks 中的接口"><CODE>Condition</CODE></A> 实例。<p>在等待条件前,锁定必须由当前线程保持。调用 <A HREF="Condition.html#await()"><CODE>Condition.await()</CODE></A> 将在等待前以原子方式释放锁定,并在等待返回前重新获取锁定。<p><b>实现注意事项</b><p><A HREF="Condition.html" title="java.util.concurrent.locks 中的接口"><CODE>Condition</CODE></A> 实例的具体操作依赖于 <tt>Lock</tt> 实现,并且该实现必须对此加以记录。<P><DD><DL><DT><B>返回:</B><DD>用于此 <tt>Lock</tt> 实例的新 <A HREF="Condition.html" title="java.util.concurrent.locks 中的接口"><CODE>Condition</CODE></A> 实例。<DT><B>抛出:</B><DD><CODE><A HREF="../../../lang/UnsupportedOperationException.html" title="java.lang 中的类">UnsupportedOperationException</A></CODE> - 如果此 <tt>Lock</tt> 实现不支持条件。</DL></DD></DL><!-- ========= END OF CLASS DATA ========= --><HR><!-- ======= START OF BOTTOM NAVBAR ====== --><A NAME="navbar_bottom"><!-- --></A><A HREF="#skip-navbar_bottom" title="跳过导航链接"></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>概述</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>软件包</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>类</B></FONT>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Lock.html"><FONT CLASS="NavBarFont1"><B>使用</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>树</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>已过时</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>索引</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>帮助</B></FONT></A>&nbsp;</TD>  </TR></TABLE></TD><TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM><b>Java<sup><font size=-2>TM</font></sup>&nbsp;2&nbsp;Platform<br>Standard&nbsp;Ed. 5.0</b></EM></TD></TR><TR><TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">&nbsp;<A HREF="Condition.html" title="java.util.concurrent.locks 中的接口"><B>上一个类</B></A>&nbsp;&nbsp;<A HREF="LockSupport.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_2FLock.html" target="_top"><B>框架</B></A>  &nbsp;&nbsp;<A HREF="Lock.html" target="_top"><B>无框架</B></A>  &nbsp;&nbsp;<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">  摘要:&nbsp;嵌套&nbsp;|&nbsp;字段&nbsp;|&nbsp;构造方法&nbsp;|&nbsp;<A HREF="#method_summary">方法</A></FONT></TD><TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">详细信息:&nbsp;字段&nbsp;|&nbsp;构造方法&nbsp;|&nbsp;<A HREF="#method_detail">方法</A></FONT></TD></TR></TABLE><A NAME="skip-navbar_bottom"></A><!-- ======== END OF BOTTOM NAVBAR ======= --><HR><font size="-1"><a href="../../../../../../../../../../java.sun.com/cgi-bin/bugreport.cgi">提交错误或意见</a><br>有关更多的 API 参考资料和开发人员文档,请参阅 <a href="../../../../../../../../../../java.sun.com/j2se/1.5.0/docs/relnotes/devdocs-vs-specs.html">Java 2 SDK SE 开发人员文档</a>。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。 <p>版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守<a href="../../../../../../../../../../java.sun.com/j2se/1.5.0/docs/relnotes/license.html">许可证条款</a>。另请参阅<a href="../../../../../../../../../../java.sun.com/docs/redist.html">文档重新分发政策</a>。</font></BODY></HTML>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?