📄 pausethread.htm
字号:
<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">
<META CONTENT="no-cache" HTTP-EQUIV="Pragma">
<LINK href="/almanac.css" media="screen" type="text/css" rel="stylesheet">
</HEAD>
<BODY>
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">
<TR>
<TD></TD>
</TR>
</TABLE>
<br>
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">
<TR>
<TD></TD>
</TR>
<TR>
<TD rowspan="3"><A HREF="/?l=ex"><IMG BORDER="0" ALIGN="BOTTOM" HSPACE="10" SRC="/egs/almanac14a.jpg"></A></TD><TD VALIGN="top">
<h1>The Java Developers Almanac 1.4</h1>
<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">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">
<TR>
<TD valign="top"><script type="text/javascript">
<!--
google_ad_client = "pub-6001183370374757";
google_ad_width = 120;
google_ad_height = 600;
google_ad_format = "120x600_as";
google_ad_channel = "4777242811";
google_ad_type = "text_image";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "6666CC";
google_color_url = "6666CC";
google_color_text = "000000";
//--></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script></TD><TD> </TD><TD valign="top">
<DIV ALIGN="LEFT">
<A HREF="/">Home</A>
>
<A HREF="../index.html">List of Packages</A>
>
<A HREF="../java.lang/pkg.html">java.lang</A><font color="#666666" class="xsmall-font">
[58 examples]
</font>
>
<B><A HREF="../java.lang/pkg.html#Threads">Threads</A></B><font color="#666666" class="xsmall-font">
[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">
<b>Related Examples</b></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>
<a class="eglink" href="/egs/java.lang/pkg.html?l=rel#Assertions">
Assertions
</a>
<a class="eglink" href="/egs/java.lang/pkg.html?l=rel#Classes">
Classes
</a>
<a class="eglink" href="/egs/java.lang/pkg.html?l=rel#Commands">
Commands
</a>
<a class="eglink" href="/egs/java.lang/pkg.html?l=rel#Numbers">
Numbers
</a>
<a class="eglink" href="/egs/java.lang/pkg.html?l=rel#Objects">
Objects
</a>
<a class="eglink" href="/egs/java.lang/pkg.html?l=rel#Strings">
Strings
</a>
<a class="eglink" href="/egs/java.lang/pkg.html?l=rel#System%20Properties">
System Properties
</a>
</td>
</tr>
</table>
<br>
<br>
<FONT class="xsmall-font">
© 2002 Addison-Wesley.
</FONT></TD><TD> </TD><TD valign="top"><A href="http://compositesw.com/devzone?ref=javaalmanac"><IMG alt="Click Here" height="600" width="120" border="0" src="/csw_oad_120x600_final.gif"></A></TD>
</TR>
</TABLE>
</BODY>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<META CONTENT="NO-CACHE" HTTP-EQUIV="PRAGMA">
</HEAD>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -