Java Thread.interrupt 害人! 中断JAVA线程(zz)
程序是很简易的。然而,在编程人员面前,多线程呈现出了一组新的难题,如果没有被恰当的解决,将导致意外的行为以及细微的、难以发现的错误。
在本篇文章中,我们针对这些难题之一:如何中断一个正在运行的线程。
背景
中断(Interrupt)一个线程意味着在该线程完成任务之前停止其正在进行的一切,有效地中止其当前的操作。线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于这个程序。虽然初次看来它可能显得简单,但是,你必须进行一些预警以实现期望的结果。你最好还是牢记以下的几点告诫。
首先,忘掉Thread.stop方法。虽然它确实停止了一个正在运行的线程,然而,这种方法是不安全也是不受提倡的,这意味着,在未来的JAVA版本中,它将不复存在。
一些轻率的家伙可能被另一种方法Thread.interrupt所迷惑。尽管,其名称似乎在暗示着什么,然而,这种方法并不会中断一个正在运行的线程(待会将进一步说明),正如Listing A中描述的那样。它创建了一个线程,并且试图使用Thread.interrupt方法停止该线程。Thread.sleep()方法的调用,为线程的初始化和中止提供了充裕的时间。线程本身并不参与任何有用的操作。
class Example1 extends Thread {
boolean stop=false;
public static void main( String args[] ) throws Exception {
Example1 thread = new Example1();
System.out.println( "Starting thread..." );
thread.start();
Thread.sleep( 3000 );
System.out.println( "Interrupting thread..." );
thread.interrupt();
Thread.sle
相关文档:
8.9.2 接口
接口(Interface)是一种复合数据类型。
至此,Java语言的所有数据类型介绍完了,下面进行一个简单的总结。Java语言的数据类型分为两大类:基本数据类型和复合数据类型,其中基本数据类型有8种,复合数据类 ......
最近开始学习java,参考教科书写了一个简单的计算器程序,贴上来,以便有用的时候可以参考。
呵呵,哈哈!!!
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import jav ......
选择题
3阅读一下程序:
Boolean a=false;
Boolean b=true;
Boolean c=(a&b)&&(!b);
Int result=b==false?1:2;
这段程序执行完后,c与result的值是(D)。
A c=false; result=1; B. c=true;result=2;
C.c=true;result=1 D. c=false; result=2
6.下述声明中哪种可防 ......
JDK版本:jdk1.6.0_17
a. 下载安装包jdk-6u17-linux-i586-rpm.bin
b. cp jdk-6u17-linux-i586-rpm.bin /usr/local/
c. chmod a+x jdk-6u17-linux-i586-rpm.bin
d. sh jdk-6u17-linux-i586-rpm.bin 接受协议yes,安装完成
e. 设置环境变量
vi /etc/profile
加入下面内容:
#set java environment
JAVA_HOME=/ ......
Java编程时,为类DialogTry2添加关闭窗口事件,我在构造方法中采用事件适配器来实现:
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
&nbs ......