pausethread.html

来自「java类库详细讲解」· HTML 代码 · 共 230 行

HTML
230
字号
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>Pausing a Thread
(Java Developers Almanac Example)
</TITLE>
<META CONTENT="Patrick Chan" NAME="AUTHOR">
<META CONTENT="Code Examples from The Java Developers Almanac 1.4" NAME="DESCRIPTION">
<META CONTENT="Addison-Wesley/Patrick Chan" NAME="OWNER">
<META CONTENT="3/20/02" NAME="revision">
<STYLE TYPE="text/css">
<!--     BODY CODE  {font-family: Courier, Monospace;           font-size: 11pt}    TABLE, BODY          {font-family: Verdana, Arial, Helvetica, sans-serif;           font-size: 10pt}    PRE   {font-family: Courier, Monospace;           font-size: 10pt}    H3    {font-family: Verdana, Arial, Helvetica, sans-serif;           font-size: 11pt}    A.eglink {text-decoration: none}    A:hover.eglink {text-decoration: underline}    -->
</STYLE>
</HEAD>
<BODY>
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">
<TR>
<TD rowspan="3"><A HREF="/?l=ex"><IMG BORDER="0" ALIGN="BOTTOM" HSPACE="10" SRC="/egs/almanac14a.jpg"></A></TD><TD VALIGN="top"><font face="Times" size="6"><b>The Java Developers Almanac 1.4</b></font>
<br>
        Order this book from <a href="/cgi-bin/scripts/redirect.pl?l=ex&url=http://www.amazon.com/exec/obidos/ASIN/0201752808/xeo">Amazon</a>.
    </TD>
</TR>
<TR>
<TD align="right" valign="bottom">
<FORM method="get" action="/cgi-bin/search/find.pl">
<INPUT size="25" name="words" type="text"><INPUT value="Search" type="submit">
</FORM>
</TD>
</TR>
</TABLE>
<HR color="#6666cc">
<DIV ALIGN="LEFT">
<A HREF="/">Home</A>
    &gt;
    <A HREF="../index.html">List of Packages</A>
    &gt;
    <B><A HREF="../java.lang/pkg.html">java.lang</A></B><font color="#666666" SIZE="-2">
        &nbsp;[58 examples]
        </font>
        &gt;
        <B><A HREF="../java.lang/pkg.html#Threads">Threads</A></B><font color="#666666" SIZE="-2">
            &nbsp;[11 examples]
            </font>
</DIV><P>
  <h3>
    e96.  
    Pausing a Thread</h3>

<P> The proper way to temporarily pause the execution of another
thread is to set a variable that the target thread checks
occasionally. When the target thread detects that the variable is
set, it calls <code>Object.wait()</code>. The paused thread can then be woken up by
calling its <code>Object.notify()</code> method.

<P> Note: <code>Thread.suspend()</code> and <code>Thread.resume()</code> provide
methods for pausing a thread. However, these methods have been
deprecated because they are very unsafe. Using them often results in
deadlocks.  With the approach above, the target thread can ensure that
it will be paused in an appropriate place.


<pre>
    // Create and start the thread
    <font color="#0066ff"><i>MyThread</i></font> thread = new <font color="#0066ff"><i>MyThread</i></font>();
    thread.start();
    
    while (true) {
        // Do work
    
        // Pause the thread
        synchronized (thread) {
            thread.pleaseWait = true;
        }
    
        // Do work
    
        // Resume the thread
        synchronized (thread) {
            thread.pleaseWait = false;
            thread.notify();
        }
    
        // Do work
    }
    
    class <font color="#0066ff"><i>MyThread</i></font> extends Thread {
        boolean pleaseWait = false;
    
        // This method is called when the thread runs
        public void run() {
            while (true) {
                // Do work
    
                // Check if should wait
                synchronized (this) {
                    while (pleaseWait) {
                        try {
                            wait();
                        } catch (Exception e) {
                        }
                    }
                }
    
                // Do work
            }
        }
    }
</pre>
<P><table width="600" CELLSPACING="0" CELLPADDING="2" BORDER="0">
<tr>
<td bgcolor="#6666cc" align="center"><font color="#ffffff">
            &nbsp;Related Examples
        </font></td>
</tr>
</table>


e92. <a class="eglink" href="BasicThread.html?l=rel">
    Creating a Thread
</a>
<br>

e93. <a class="eglink" href="StopThread.html?l=rel">
    Stopping a Thread
</a>
<br>

e94. <a class="eglink" href="IfStopped.html?l=rel">
    Determining When a Thread Has Finished
</a>
<br>

e95. <a class="eglink" href="Sleep.html?l=rel">
    Pausing the Current Thread
</a>
<br>

e97. <a class="eglink" href="IfLocked.html?l=rel">
    Determining If the Current Thread Is Holding a Synchronized Lock
</a>
<br>

e98. <a class="eglink" href="DaemonThread.html?l=rel">
    Allowing an Application with Live Threads to Exit
</a>
<br>

e99. <a class="eglink" href="ListThreads.html?l=rel">
    Listing All Running Threads
</a>
<br>

e100. <a class="eglink" href="TLocal.html?l=rel">
    Using a Thread-local Variable
</a>
<br>

e101. <a class="eglink" href="GetStack.html?l=rel">
    Getting the Stack Trace of an Exception
</a>
<br>

e102. <a class="eglink" href="WorkQueue.html?l=rel">
    Implementing a Work Queue
</a>
<br>


<table width="600" CELLSPACING="0" CELLPADDING="2" BORDER="0">
<tr>
<td align="left">
<br>
        See also: 
<a class="eglink" href="/egs/java.lang/pkg.html?l=rel#Arrays">
    Arrays
</a>&nbsp;&nbsp;

<a class="eglink" href="/egs/java.lang/pkg.html?l=rel#Assertions">
    Assertions
</a>&nbsp;&nbsp;

<a class="eglink" href="/egs/java.lang/pkg.html?l=rel#Classes">
    Classes
</a>&nbsp;&nbsp;

<a class="eglink" href="/egs/java.lang/pkg.html?l=rel#Commands">
    Commands
</a>&nbsp;&nbsp;

<a class="eglink" href="/egs/java.lang/pkg.html?l=rel#Numbers">
    Numbers
</a>&nbsp;&nbsp;

<a class="eglink" href="/egs/java.lang/pkg.html?l=rel#Objects">
    Objects
</a>&nbsp;&nbsp;

<a class="eglink" href="/egs/java.lang/pkg.html?l=rel#Strings">
    Strings
</a>&nbsp;&nbsp;

<a class="eglink" href="/egs/java.lang/pkg.html?l=rel#System%20Properties">
    System Properties
</a>&nbsp;&nbsp;

</td>
</tr>
</table>

<br>

<br>
<FONT FACE="Verdana, Arial, Helvetica, sans-serif" SIZE="0">
&copy; 2002 Addison-Wesley.
</FONT>
</BODY>
</HTML>

⌨️ 快捷键说明

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