试试看中断一个线程
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 ())
sydtemoutprintln(First thread been interrupted);
注意这只能判定是否通过对线程调用interrupt()设置了中断标志并不能判定线程是否仍在运行一个线程可以有自己的中断标志设置和继续执行它不会因interrupt()的调用而被迫终止它测试当前执行的线程是否被中断如果是它在当前Thread对象中清除中断标志并返回true
实例方法Interrupted()对线程的中断标志没有什么影响如果标志被设置保留此设置但是Thread类中的静态方法interrupted()是不同的它测试是否当前执行的线程被中断如果是它清除当前Thread对象中的中断标志并返回true
当抛出一个InterruptedException异常时在线程中注册中断的标志被清除因此对islnterrupted()interrupted()的调用将返回false
[] [] [] [] [] [] [] []