lock.html
来自「j2se5-api-zh,java文档的中文版本」· HTML 代码 · 共 443 行 · 第 1/2 页
HTML
443 行
<!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>Lock (Java 2 Platform SE 5.0)</TITLE><META NAME="keywords" CONTENT="java.util.concurrent.locks.Lock interface"><LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style"><SCRIPT type="text/javascript">function windowTitle(){ parent.document.title="Lock (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/Lock.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="Condition.html" title="java.util.concurrent.locks 中的接口"><B>上一个类</B></A> <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> <A HREF="Lock.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="#method_summary">方法</A></FONT></TD><TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">详细信息: 字段 | 构造方法 | <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>接口 Lock</H2><DL><DT><B>所有已知实现类:</B> <DD><A HREF="ReentrantLock.html" title="java.util.concurrent.locks 中的类">ReentrantLock</A>, <A HREF="ReentrantReadWriteLock.ReadLock.html" title="java.util.concurrent.locks 中的类">ReentrantReadWriteLock.ReadLock</A>, <A HREF="ReentrantReadWriteLock.WriteLock.html" title="java.util.concurrent.locks 中的类">ReentrantReadWriteLock.WriteLock</A></DD></DL><HR><DL><DT><PRE>public interface <B>Lock</B></DL></PRE><P><tt>Lock</tt> 实现提供了比使用 <tt>synchronized</tt> 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的 <A HREF="Condition.html" title="java.util.concurrent.locks 中的接口"><CODE>Condition</CODE></A> 对象。<p>锁定是控制多个线程对共享资源进行访问的工具。通常,锁定提供了对共享资源的独占访问。一次只能有一个线程获得锁定,对共享资源的所有访问都需要首先获得锁定。不过,某些锁定可能允许对共享资源并发访问,如 <A HREF="ReadWriteLock.html" title="java.util.concurrent.locks 中的接口"><CODE>ReadWriteLock</CODE></A> 的读取锁定。<p><tt>synchronized</tt> 方法或语句的使用提供了对与每个对象相关的隐式监视器锁定的访问,但却强制所有锁定获取和释放均要出现在一个块结构中:当获取了多个锁定时,它们必须以相反的顺序释放,且必须在与所有锁定被获取时相同的词法范围内释放所有锁定。<p>虽然 <tt>synchronized</tt> 方法和语句的范围机制使得使用监视器锁定编程方便了很多,而且还帮助避免了很多涉及到锁定的常见编程错误,但有时也需要以更为灵活的方式使用锁定。例如,某些遍历并发访问的数据结果的算法要求使用 "hand-over-hand" 或 "chain locking":获取节点 A 的锁定,然后再获取节点 B 的锁定,然后释放 A 并获取 C,然后释放 B 并获取 D,依此类推。<tt>Lock</tt> 接口的实现允许锁定在不同的作用范围内获取和释放,并允许以任何顺序获取和释放多个锁定,从而支持使用这种技术。<p>随着灵活性的增加,也带来了更多的责任。不使用块结构锁定就失去了使用 <tt>synchronized</tt> 方法和语句时会出现的锁定自动释放功能。在大多数情况下,应该使用以下语句: <pre><tt> Lock l = ...; l.lock(); try { // access the resource protected by this lock } finally { l.unlock(); } </tt></pre>锁定和取消锁定出现在不同作用范围中时,必须谨慎地确保保持锁定时所执行的所有代码用 try-finally 或 try-catch 加以保护,以确保在必要时释放锁定。<p><tt>Lock</tt> 实现提供了使用 <tt>synchronized</tt> 方法和语句所没有的其他功能,包括提供了一个非块结构的获取锁定尝试 (<A HREF="Lock.html#tryLock()"><CODE>tryLock()</CODE></A>)、一个获取可中断锁定的尝试 (<A HREF="Lock.html#lockInterruptibly()"><CODE>lockInterruptibly()</CODE></A>) 和一个获取超时失效锁定的尝试 (<A HREF="Lock.html#tryLock(long, java.util.concurrent.TimeUnit)"><CODE>tryLock(long, TimeUnit)</CODE></A>)。<p><tt>Lock</tt> 类还可以提供与隐式监视器锁定完全不同的行为和语义,如保证排序、非重入用法或死锁检测。如果某个实现提供了这样特殊的语义,则该实现必须对这些语义加以记录。<p>注意,<tt>Lock</tt> 实例只是普通的对象,其本身可以在 <tt>synchronized</tt> 语句中作为目标使用。获取 <tt>Lock</tt> 实例的监视器锁定与调用该实例的任何 <A HREF="Lock.html#lock()"><CODE>lock()</CODE></A> 方法没有特别的关系。为了避免混淆,建议除了在其自身的实现中之外,决不要以这种方式使用 <tt>Lock</tt> 实例。<p>除非另有说明,否则为任何参数传递 <tt>null</tt> 值都将导致抛出 <A HREF="../../../lang/NullPointerException.html" title="java.lang 中的类"><CODE>NullPointerException</CODE></A>。<h3>内存同步</h3><p>所有 <tt>Lock</tt> 实现都<em>必须</em> 实施与内置监视器锁定提供的相同内存同步语义: <ul><li>成功的 lock 操作与成功的 <tt>monitorEnter</tt> 操作类似<li>而成功的 <tt>unlock</tt> 操作则与成功的 <tt>monitorExit</tt> 操作类似 </ul>不成功的锁定与取消锁定操作以及重入锁定/取消锁定操作都不需要任何内存同步效果。<h3>实现注意事项</h3><p> 三种形式的锁定获取(可中断、不可中断和定时)在其性能特征、排序保证或其他实现质量上可能会有所不同。而且,对于给定的 <tt>Lock</tt> 类,可能没有中断<em>正在进行的</em> 锁定获取的能力。因此,并不要求实现为所有三种形式的锁定获取定义相同的保证或语义,也不要求其支持中断正在进行的锁定获取。实现必需清楚地对每个锁定方法所提供的语义和保证进行记录。还必须遵守此接口中定义的中断语义,以便为锁定获取中断提供支持:完全支持中断,或仅在进入方法时支持中断。<p>由于中断通常意味着取消,而通常又很少进行中断检查,因此,相对于普通方法返回而言,实现可能更喜欢响应某个中断。即使出现在另一个操作后的中断可能会释放线程锁定时也是如此。实现应记录此行为。<P><P><DL><DT><B>从以下版本开始:</B></DT> <DD>1.5</DD><DT><B>另请参见:</B><DD><A HREF="ReentrantLock.html" title="java.util.concurrent.locks 中的类"><CODE>ReentrantLock</CODE></A>, <A HREF="Condition.html" title="java.util.concurrent.locks 中的接口"><CODE>Condition</CODE></A>, <A HREF="ReadWriteLock.html" title="java.util.concurrent.locks 中的接口"><CODE>ReadWriteLock</CODE></A></DL><HR><P><!-- ========== 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> void</CODE></FONT></TD><TD><CODE><B><A HREF="Lock.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="Lock.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="Lock.html#newCondition()">newCondition</A></B>()</CODE><BR> 返回绑定到此 <tt>Lock</tt> 实例的新 <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> boolean</CODE></FONT></TD><TD><CODE><B><A HREF="Lock.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><TD><CODE><B><A HREF="Lock.html#tryLock(long, java.util.concurrent.TimeUnit)">tryLock</A></B>(long time, <A HREF="../TimeUnit.html" title="java.util.concurrent 中的枚举">TimeUnit</A> unit)</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> void</CODE></FONT></TD><TD><CODE><B><A HREF="Lock.html#unlock()">unlock</A></B>()</CODE><BR> 释放锁定。</TD></TR></TABLE> <P><!-- ============ METHOD DETAIL ========== --><A NAME="method_detail"><!-- --></A><TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""><TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?