blob: 4d4c83679647df9fc8c514d639030447e9d5d070 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (11.0.11) on Mon Jun 14 16:40:44 EDT 2021 -->
<title>IteratingCallback (Eclipse Jetty API Doc - v10.0.5)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2021-06-14">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
<script type="text/javascript" src="../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="IteratingCallback (Eclipse Jetty API Doc - v10.0.5)";
}
}
catch(err) {
}
//-->
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":6,"i9":10,"i10":10,"i11":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/IteratingCallback.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.eclipse.jetty.util</a></div>
<h2 title="Class IteratingCallback" class="title">Class IteratingCallback</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.eclipse.jetty.util.IteratingCallback</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="Callback.html" title="interface in org.eclipse.jetty.util">Callback</a></code>, <code><a href="thread/Invocable.html" title="interface in org.eclipse.jetty.util.thread">Invocable</a></code></dd>
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><code><a href="../proxy/AsyncMiddleManServlet.ProxyReader.html" title="class in org.eclipse.jetty.proxy">AsyncMiddleManServlet.ProxyReader</a></code>, <code><a href="../proxy/AsyncProxyServlet.StreamReader.html" title="class in org.eclipse.jetty.proxy">AsyncProxyServlet.StreamReader</a></code>, <code><a href="../websocket/core/internal/FrameFlusher.html" title="class in org.eclipse.jetty.websocket.core.internal">FrameFlusher</a></code>, <code><a href="../http2/HTTP2Flusher.html" title="class in org.eclipse.jetty.http2">HTTP2Flusher</a></code>, <code><a href="IteratingNestedCallback.html" title="class in org.eclipse.jetty.util">IteratingNestedCallback</a></code></dd>
</dl>
<hr>
<pre>public abstract class <span class="typeNameLabel">IteratingCallback</span>
extends java.lang.Object
implements <a href="Callback.html" title="interface in org.eclipse.jetty.util">Callback</a></pre>
<div class="block">This specialized callback implements a pattern that allows
a large job to be broken into smaller tasks using iteration
rather than recursion.
<p>
A typical example is the write of a large content to a socket,
divided in chunks. Chunk C1 is written by thread T1, which
also invokes the callback, which writes chunk C2, which invokes
the callback again, which writes chunk C3, and so forth.
</p>
<p>
The problem with the example is that if the callback thread
is the same that performs the I/O operation, then the process
is recursive and may result in a stack overflow.
To avoid the stack overflow, a thread dispatch must be performed,
causing context switching and cache misses, affecting performance.
</p>
<p>
To avoid this issue, this callback uses an AtomicReference to
record whether success callback has been called during the processing
of a sub task, and if so then the processing iterates rather than
recurring.
</p>
<p>
Subclasses must implement method <a href="#process()"><code>process()</code></a> where the sub
task is executed and a suitable <a href="IteratingCallback.Action.html" title="enum in org.eclipse.jetty.util"><code>IteratingCallback.Action</code></a> is
returned to this callback to indicate the overall progress of the job.
This callback is passed to the asynchronous execution of each sub
task and a call the <a href="#succeeded()"><code>succeeded()</code></a> on this callback represents
the completion of the sub task.
</p></div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="IteratingCallback.Action.html" title="enum in org.eclipse.jetty.util">IteratingCallback.Action</a></span></code></th>
<td class="colLast">
<div class="block">The indication of the overall progress of the overall job that
implementations of <a href="#process()"><code>process()</code></a> must return.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="nested.classes.inherited.from.class.org.eclipse.jetty.util.Callback">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from interface&nbsp;org.eclipse.jetty.util.<a href="Callback.html" title="interface in org.eclipse.jetty.util">Callback</a></h3>
<code><a href="Callback.Completable.html" title="class in org.eclipse.jetty.util">Callback.Completable</a>, <a href="Callback.Completing.html" title="class in org.eclipse.jetty.util">Callback.Completing</a>, <a href="Callback.InvocableCallback.html" title="interface in org.eclipse.jetty.util">Callback.InvocableCallback</a>, <a href="Callback.Nested.html" title="class in org.eclipse.jetty.util">Callback.Nested</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="nested.classes.inherited.from.class.org.eclipse.jetty.util.thread.Invocable">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from interface&nbsp;org.eclipse.jetty.util.thread.<a href="thread/Invocable.html" title="interface in org.eclipse.jetty.util.thread">Invocable</a></h3>
<code><a href="thread/Invocable.InvocationType.html" title="enum in org.eclipse.jetty.util.thread">Invocable.InvocationType</a></code></li>
</ul>
</li>
</ul>
</section>
<!-- =========== FIELD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<ul class="blockList">
<li class="blockList"><a id="fields.inherited.from.class.org.eclipse.jetty.util.Callback">
<!-- -->
</a>
<h3>Fields inherited from interface&nbsp;org.eclipse.jetty.util.<a href="Callback.html" title="interface in org.eclipse.jetty.util">Callback</a></h3>
<code><a href="Callback.html#NOOP">NOOP</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="fields.inherited.from.class.org.eclipse.jetty.util.thread.Invocable">
<!-- -->
</a>
<h3>Fields inherited from interface&nbsp;org.eclipse.jetty.util.thread.<a href="thread/Invocable.html" title="interface in org.eclipse.jetty.util.thread">Invocable</a></h3>
<code><a href="thread/Invocable.html#__nonBlocking">__nonBlocking</a></code></li>
</ul>
</li>
</ul>
</section>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier</th>
<th class="colSecond" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected </code></td>
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">IteratingCallback</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected </code></td>
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(boolean)">IteratingCallback</a></span>&#8203;(boolean&nbsp;needReset)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#close()">close</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#failed(java.lang.Throwable)">failed</a></span>&#8203;(java.lang.Throwable&nbsp;x)</code></th>
<td class="colLast">
<div class="block">Invoked when the sub task fails.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isClosed()">isClosed</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isFailed()">isFailed</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isSucceeded()">isSucceeded</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#iterate()">iterate</a></span>()</code></th>
<td class="colLast">
<div class="block">This method must be invoked by applications to start the processing
of sub tasks.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onCompleteFailure(java.lang.Throwable)">onCompleteFailure</a></span>&#8203;(java.lang.Throwable&nbsp;cause)</code></th>
<td class="colLast">
<div class="block">Invoked when the overall task has completed with a failure.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onCompleteSuccess()">onCompleteSuccess</a></span>()</code></th>
<td class="colLast">
<div class="block">Invoked when the overall task has completed successfully.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>protected abstract <a href="IteratingCallback.Action.html" title="enum in org.eclipse.jetty.util">IteratingCallback.Action</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#process()">process</a></span>()</code></th>
<td class="colLast">
<div class="block">Method called by <a href="#iterate()"><code>iterate()</code></a> to process the sub task.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#reset()">reset</a></span>()</code></th>
<td class="colLast">
<div class="block">Resets this callback.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#succeeded()">succeeded</a></span>()</code></th>
<td class="colLast">
<div class="block">Invoked when the sub task succeeds.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#toString()">toString</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.eclipse.jetty.util.thread.Invocable">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.eclipse.jetty.util.thread.<a href="thread/Invocable.html" title="interface in org.eclipse.jetty.util.thread">Invocable</a></h3>
<code><a href="thread/Invocable.html#getInvocationType()">getInvocationType</a></code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>IteratingCallback</h4>
<pre>protected&nbsp;IteratingCallback()</pre>
</li>
</ul>
<a id="&lt;init&gt;(boolean)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>IteratingCallback</h4>
<pre>protected&nbsp;IteratingCallback&#8203;(boolean&nbsp;needReset)</pre>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="process()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>process</h4>
<pre class="methodSignature">protected abstract&nbsp;<a href="IteratingCallback.Action.html" title="enum in org.eclipse.jetty.util">IteratingCallback.Action</a>&nbsp;process()
throws java.lang.Throwable</pre>
<div class="block">Method called by <a href="#iterate()"><code>iterate()</code></a> to process the sub task.
<p>
Implementations must start the asynchronous execution of the sub task
(if any) and return an appropriate action:
</p>
<ul>
<li><a href="IteratingCallback.Action.html#IDLE"><code>IteratingCallback.Action.IDLE</code></a> when no sub tasks are available for execution
but the overall job is not completed yet</li>
<li><a href="IteratingCallback.Action.html#SCHEDULED"><code>IteratingCallback.Action.SCHEDULED</code></a> when the sub task asynchronous execution
has been started</li>
<li><a href="IteratingCallback.Action.html#SUCCEEDED"><code>IteratingCallback.Action.SUCCEEDED</code></a> when the overall job is completed</li>
</ul></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the appropriate Action</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Throwable</code> - if the sub task processing throws</dd>
</dl>
</li>
</ul>
<a id="onCompleteSuccess()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onCompleteSuccess</h4>
<pre class="methodSignature">protected&nbsp;void&nbsp;onCompleteSuccess()</pre>
<div class="block">Invoked when the overall task has completed successfully.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="#onCompleteFailure(java.lang.Throwable)"><code>onCompleteFailure(Throwable)</code></a></dd>
</dl>
</li>
</ul>
<a id="onCompleteFailure(java.lang.Throwable)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onCompleteFailure</h4>
<pre class="methodSignature">protected&nbsp;void&nbsp;onCompleteFailure&#8203;(java.lang.Throwable&nbsp;cause)</pre>
<div class="block">Invoked when the overall task has completed with a failure.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>cause</code> - the throwable to indicate cause of failure</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="#onCompleteSuccess()"><code>onCompleteSuccess()</code></a></dd>
</dl>
</li>
</ul>
<a id="iterate()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>iterate</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;iterate()</pre>
<div class="block">This method must be invoked by applications to start the processing
of sub tasks. It can be called at any time by any thread, and it's
contract is that when called, then the <a href="#process()"><code>process()</code></a> method will
be called during or soon after, either by the calling thread or by
another thread.</div>
</li>
</ul>
<a id="succeeded()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>succeeded</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;succeeded()</pre>
<div class="block">Invoked when the sub task succeeds.
Subclasses that override this method must always remember to call
<code>super.succeeded()</code>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="Callback.html#succeeded()">succeeded</a></code>&nbsp;in interface&nbsp;<code><a href="Callback.html" title="interface in org.eclipse.jetty.util">Callback</a></code></dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="Callback.html#failed(java.lang.Throwable)"><code>Callback.failed(Throwable)</code></a></dd>
</dl>
</li>
</ul>
<a id="failed(java.lang.Throwable)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>failed</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;failed&#8203;(java.lang.Throwable&nbsp;x)</pre>
<div class="block">Invoked when the sub task fails.
Subclasses that override this method must always remember to call
<code>super.failed(Throwable)</code>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="Callback.html#failed(java.lang.Throwable)">failed</a></code>&nbsp;in interface&nbsp;<code><a href="Callback.html" title="interface in org.eclipse.jetty.util">Callback</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>x</code> - the reason for the operation failure</dd>
</dl>
</li>
</ul>
<a id="close()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>close</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;close()</pre>
</li>
</ul>
<a id="isClosed()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isClosed</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;isClosed()</pre>
</li>
</ul>
<a id="isFailed()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isFailed</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;isFailed()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>whether this callback has failed</dd>
</dl>
</li>
</ul>
<a id="isSucceeded()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isSucceeded</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;isSucceeded()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>whether this callback has succeeded</dd>
</dl>
</li>
</ul>
<a id="reset()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>reset</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;reset()</pre>
<div class="block">Resets this callback.
<p>
A callback can only be reset to IDLE from the
SUCCEEDED or FAILED states or if it is already IDLE.
</p></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the reset was successful</dd>
</dl>
</li>
</ul>
<a id="toString()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>toString</h4>
<pre class="methodSignature">public&nbsp;java.lang.String&nbsp;toString()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>toString</code>&nbsp;in class&nbsp;<code>java.lang.Object</code></dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/IteratingCallback.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &#169; 1995&#x2013;2021 <a href="https://webtide.com">Webtide</a>. All rights reserved.</small></p>
</footer>
</body>
</html>