当前位置:编程学习 > JAVA >>

Java中终止某个线程的方法

在Java中有专门终止某个线程的API,如stop()和interrupt()。其中stop()由于安全机制的我问题已经被废弃不用,现在就剩下interrupt。其实这个方法并不是一个终断动作的操作,而是一个设置终断状态的操作。它需要和isInterrupted()配合使用。例如:
1. package org.leadfar; 
2. 
3. 
4. public class MyThread04 extends Thread { 
5.      
6.     private boolean stop = false; 
7.     public MyThread04(String threadName) { 
8.         super(threadName); 
9.     } 
10. 
11.     @Override
12.     public void run() { 
13.          
14.         for (int j = 0; j < 100; j++) { 
15.             if(this.isInterrupted()) break; 
16.             System.out.println(Thread.currentThread().getName()+":"+j); 
17.             try { 
18.                 Thread.sleep(1000); 
19.             } catch (InterruptedException e) { 
20.                 e.printStackTrace(); 
21.             } 
22.         } 
23.          
24.     } 
25.      
26.     public void setStop() { 
27.         this.stop = true; 
28.     } 
29. 
30.     //第一个线程 
31.     public static void main(String[] args) { 
32.         MyThread04 t = new MyThread04("辅线程"); 
33.         t.start(); 
34.          
35.         for (int i = 0; i < 10; i++) { 
36.             System.out.println(Thread.currentThread().getName()+":"+i); 
37.         } 
38.         System.out.println("...................."); 
39.         t.interrupt(); 
40.          
41.     } 
42. } 
      但这个很可能不会终止线程,因为当我们终止这个线程时很可能就会发生InterruptedException异常,当有这个异常发生时我们设置的终断状态也会被清除,所以我们要终断某个线程应采用以下这个方法:
 
1. package org.leadfar; 
2. 
3. 
4. public class MyThread04 extends Thread { 
5.      
6.     private boolean stop = false; 
7.     public MyThread04(String threadName) { 
8.         super(threadName); 
9.     } 
10. 
11.     @Override
12.     public void run() { 
13.          
14.         for (int j = 0; j < 100; j++) { 
15.             if(stop) break; 
16.             System.out.println(Thread.currentThread().getName()+":"+j); 
17.             try { 
18.                 Thread.sleep(1000); 
19.             } catch (InterruptedException e) { 
20.                 e.printStackTrace(); 
21.             } 
22.         } 
23.          
24.     } 
25.      
26.     public void setStop() { 
27.         this.stop = true; 
28.     } 
29. 
30.     //第一个线程 
31.     public static void main(String[] args) { 
32.         MyThread04 t = new MyThread04("辅线程"); 
33.         t.start(); 
34.          
35.         for (int i = 0; i < 10; i++) { 
36.             System.out.println(Thread.currentThread().getName()+":"+i); 
37.         } 
38.         System.out.println("...................."); 
39.         t.setStop(); 
40.     } 
41. } 
  通过设置一个我们自己的标识来达到终端某个线程。

 


摘自 技术成就梦想

补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,