package-summary.html
来自「j2se5-api-zh,java文档的中文版本」· HTML 代码 · 共 257 行 · 第 1/2 页
HTML
257 行
</TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD WIDTH="15%"><B><A HREF="AtomicReferenceArray.html" title="java.util.concurrent.atomic 中的类">AtomicReferenceArray<E></A></B></TD><TD>可以用原子方式更新其元素的对象引用数组。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD WIDTH="15%"><B><A HREF="AtomicReferenceFieldUpdater.html" title="java.util.concurrent.atomic 中的类">AtomicReferenceFieldUpdater<T,V></A></B></TD><TD>基于反射的实用工具,可以对指定类的指定 <tt>volatile reference</tt> 字段进行原子更新。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD WIDTH="15%"><B><A HREF="AtomicStampedReference.html" title="java.util.concurrent.atomic 中的类">AtomicStampedReference<V></A></B></TD><TD><tt>AtomicStampedReference</tt> 维护带有整数“标志”的对象引用,可以原子方式对其进行更新。</TD></TR></TABLE> <P><A NAME="package_description"><!-- --></A><H2>软件包 java.util.concurrent.atomic 的描述</H2><P>类的小工具包,支持在单个变量上解除锁定的线程安全编程。事实上,此包中的类可将 <tt>volatile</tt> 值、字段和数组元素的概念扩展到那些也提供原子条件更新操作的类,其形式如下:<pre> boolean compareAndSet(expectedValue, updateValue);</pre><p> 如果此方法(在不同的类间参数类型也不同)当前保持 <tt>expectedValue</tt>,则以原子方式将变量设置为 <tt>updateValue</tt>,并在成功时报告 <tt>true</tt>。此包中的类还包含获取并无条件设置值的方法,以及较弱条件的原子更新操作 <tt> weakCompareAndSet</tt>。该弱版本操作在正常情况下可能更有效,但不同的是 <tt>weakCompareAndSet</tt> 方法的任何给定调用可能会失败,甚至意外失败(即没有明确的原因)。返回 <tt>false</tt> 仅意味着可以在需要时重新尝试操作,具体取决于重复执行调用的保证,当该变量保持 <tt>expectedValue</tt> 并且没有其他线程也在尝试设置该变量时,调用最终将获得成功。<p> 这些方法的规范使实现能够使用当代处理器上提供的高效机器级别原子指令。但是在某些平台上,该支持可能需要某种形式的内部锁定。因而,该方法不能严格保证不被阻塞??执行操作之前可能暂时阻塞线程。<p> 类 <A HREF="AtomicBoolean.html" title="java.util.concurrent.atomic 中的类"><CODE>AtomicBoolean</CODE></A>、<A HREF="AtomicInteger.html" title="java.util.concurrent.atomic 中的类"><CODE>AtomicInteger</CODE></A>、<A HREF="AtomicLong.html" title="java.util.concurrent.atomic 中的类"><CODE>AtomicLong</CODE></A> 和 <A HREF="AtomicReference.html" title="java.util.concurrent.atomic 中的类"><CODE>AtomicReference</CODE></A> 的实例各自提供对相应类型单个变量的访问和更新。每个类也为该类型提供适当的实用工具方法。例如,类 <tt>AtomicLong</tt> 和 <tt>AtomicInteger</tt> 提供了原子增量方法。一个应用程序将按以下方式生成序列号:<pre>class Sequencer { private AtomicLong sequenceNumber = new AtomicLong(0); public long next() { return sequenceNumber.getAndIncrement(); }}</pre><p>原子访问和更新的内存效果一般遵循以下可变规则:<ul><li> <tt>get</tt> 具有读取 <tt>volatile</tt> 变量的内存效果。<li> <tt>set</tt> 具有写入(分配) <tt>volatile</tt> 变量的内存效果。<li><tt>weakCompareAndSet</tt> 以原子方式读取和有条件地写入变量,并对于该变量上的其他内存操作进行排序,否则将充当普通的非可变内存操作。<li> <tt>compareAndSet</tt> 和所有其他的读取和更新操作(如 <tt>getAndIncrement</tt>)都有读取和写入 <tt>volatile</tt> 变量的内存效果。</ul> <p>除了包含表示单个值的类之外,此包还包含 <em>Updater</em> 类,该类可用于获取任意选定类的任意选定 <tt>volatile</tt> 字段上的 <tt>compareAndSet</tt> 操作。<A HREF="AtomicReferenceFieldUpdater.html" title="java.util.concurrent.atomic 中的类"><CODE>AtomicReferenceFieldUpdater</CODE></A>、<A HREF="AtomicIntegerFieldUpdater.html" title="java.util.concurrent.atomic 中的类"><CODE>AtomicIntegerFieldUpdater</CODE></A> 和 <A HREF="AtomicLongFieldUpdater.html" title="java.util.concurrent.atomic 中的类"><CODE>AtomicLongFieldUpdater</CODE></A> 是基于反射的实用工具,可以提供对关联字段类型的访问。它们主要用于原子数据结构中,该结构中同一节点(例如,树节点的链接)的几个 <tt>volatile</tt> 字段都独立受原子更新控制。这些类在如何以及何时使用原子更新方面具有更大的灵活性,但相应的弊端是基于映射的设置较为拙笨、使用不太方便,而且在保证方面也较差。<p><A HREF="AtomicIntegerArray.html" title="java.util.concurrent.atomic 中的类"><CODE>AtomicIntegerArray</CODE></A>、<A HREF="AtomicLongArray.html" title="java.util.concurrent.atomic 中的类"><CODE>AtomicLongArray</CODE></A> 和 <A HREF="AtomicReferenceArray.html" title="java.util.concurrent.atomic 中的类"><CODE>AtomicReferenceArray</CODE></A> 类进一步扩展了原子操作,对这些类型的数组提供了支持。这些类在为其数组元素提供 <tt>volatile</tt> 访问语义方面也引人注目,这对于普通数组来说是不受支持的。<p> <A HREF="AtomicMarkableReference.html" title="java.util.concurrent.atomic 中的类"><CODE>AtomicMarkableReference</CODE></A> 类将单个布尔值与引用关联起来。例如,可以在数据结构内部使用此位,这意味着引用的对象在逻辑上已被删除。<A HREF="AtomicStampedReference.html" title="java.util.concurrent.atomic 中的类"><CODE>AtomicStampedReference</CODE></A> 类将整数值与引用关联起来。例如,这可用于表示与更新系列对应的版本号。<p> 设计原子类主要用作各种构造块,用于实现非阻塞数据结构和相关的基础结构类。<tt>compareAndSet</tt> 方法不是锁定的常规替换方法。仅当对象的重要更新限定于<em>单个</em> 变量时才应用它。<p> 原子类不是 <tt>java.lang.Integer</tt> 和相关类的通用替换方法。它们<em>不</em> 定义诸如 <tt>hashCode</tt> 和 <tt>compareTo</tt> 之类的方法。(因为原子变量是可变的,所以对于哈希表键来说,它们不是好的选择。)另外,仅为那些通常在预期应用程序中使用的类型提供类。例如,没有表示 <tt>byte</tt> 的原子类。这种情况不常见,如果要这样做,可以使用 <tt>AtomicInteger</tt> 来保持 <tt>byte</tt> 值,并进行适当的强制转换。也可以使用 <tt>Float.floatToIntBits</tt> 和 <tt>Float.intBitstoFloat</tt> 转换来保持 float 值,使用 <tt>Double.doubleToLongBits</tt> 和 <tt>Double.longBitsToDouble</tt> 转换来保持 double 值。<P><P><DL><DT><B>从以下版本开始:</B></DT> <DD>1.5</DD></DL><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> </TD> <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>软件包</B></FONT> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">类</FONT> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.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="../package-summary.html"><B>上一个软件包</B></A> <A HREF="../locks/package-summary.html"><B>下一个软件包</B></A></FONT></TD><TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> <A HREF="../../../../index.html@java_2Futil_2Fconcurrent_2Fatomic_2Fpackage-summary.html" target="_top"><B>框架</B></A> <A HREF="package-summary.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></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 + -
显示快捷键?