java

位置:IT落伍者 >> java >> 浏览文章

Java2入门经典教程 11.1 了解线程[6]


发布日期:2023年07月01日
 
Java2入门经典教程 11.1 了解线程[6]

试试看中断一个线程

public static void main(String[] args)

{

// Create three threads

Thread first = new TryThread(Hopalong Cassidy L);

Thread second = new TryThread(Marilyn Monroe L);

Thread third = new TryThread(Slim Pickens L);

Systemoutprintln(Press Enter when you have had enough\n);

firststart(); // Start the first thread

secondstart(); // Start the second thread

thirdstart(); // Start the third thread

try

{

Systeminread(); // Wait until Enter key pressed

Systemoutprintln(Enter pressed\n);

}

catch (IOException e) // Handle IO exception

{

Systemoutprintln(e); // Output the exception

}

Systemoutprintln(Ending main());

return;

}

现在程序将产生如下输出

Press Enter when you have had enough…

Slim Hopalong Marilyn Caxsidy

Hopalong Monrog

Marily Cassidy

Hopalong Pickens

Slim Cassidy

Hopalong Monroe

Marilyn

Enter prossed…

Ending main()

Marilyn Monroe javalang

如何工作

由于当你键入回车键后main()方法对每个线程调用了interrupt()方法每个线程中调用sleep()方法注册这样一个事实线程被中断并抛出一个InterruptedException这由run()方法中的catch块捕获到并产生你看到的新输出因为catch块在while循环的外部因此这个线程调用的run()方法返回并且每个线程终止

通过对线程调用isInterrupted()方法你可以检查一个线程是否被中断如果对该线程诡用了interrupt()则返回true由于这是个实例方法你可以用这种方法判定在一个线程中是否中断了另一个线程例如main()中你可以写成

if (firstisInterrupted ())

sydtemoutprintlnFirst thread been interrupted);

注意这只能判定是否通过对线程调用interrupt()设置了中断标志并不能判定线程是否仍在运行一个线程可以有自己的中断标志设置和继续执行它不会因interrupt()的调用而被迫终止它测试当前执行的线程是否被中断如果是它在当前Thread对象中清除中断标志并返回true

实例方法Interrupted()对线程的中断标志没有什么影响如果标志被设置保留此设置但是Thread类中的静态方法interrupted()是不同的它测试是否当前执行的线程被中断如果是它清除当前Thread对象中的中断标志并返回true

当抛出一个InterruptedException异常时在线程中注册中断的标志被清除因此对islnterrupted()interrupted()的调用将返回false

[] [] [] [] [] [] [] []

               

上一篇:Java2入门经典教程 11.1 了解线程[7]

下一篇:Java2入门经典教程 11.1 了解线程[5]