線程的中止退出操做

1:codejava

public class ThreadTest1 extends  Thread{
	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();
		for(int i=0;i<500000;i++){
			if(this.interrupted()){
				System.out.println("已經退出---");
				break;
			}
			System.out.println("--"+i);
		}
	}

}



public static void main(String[] args) {
		
		ThreadTest1 th=new ThreadTest1();
		th.start();
		
		try {
			Thread.sleep(2000);
			th.interrupt();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	
log:
--331653
--331654
--331655
--331656
--331657
--331658
已經退出---

 2: code     ide

  和1對比this

 

public class ThreadTest1 extends  Thread{
	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();
		for(int i=0;i<500000;i++){
			if(this.interrupted()){
				System.out.println("已經退出---");
				break;
			}
			System.out.println("--"+i);
		}
		System.out.println("若是輸出改行-說明線程並無中止!");
	}

}



public static void main(String[] args) {
		
		ThreadTest1 th=new ThreadTest1();
		th.start();
		
		try {
			Thread.sleep(2000);
			th.interrupt();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	
	
--332195
--332196
--332197
--332198
--332199
已經退出---
若是輸出改行-說明線程並無中止!
// 說線程仍然走了for後面的語句。

  3: 異常拋出法退出線程spa

/****  異常拋出法退出線程 ********/

public class ThreadTest1 extends Thread {
	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();
		try {
			for (int i = 0; i < 500000; i++) {
				if (this.interrupted()) {
					System.out.println("已經退出---");
					throw new InterruptedException();
				}
				System.out.println("--" + i);
			}
			System.out.println("若是輸出改行-說明線程並無中止!");
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}






public static void main(String[] args) {
		
		ThreadTest1 th=new ThreadTest1();
		th.start();
		
		try {
			Thread.sleep(2000);
			th.interrupt();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	
	
	
	log: 
--341903
--341904
--341905
--341906
--341907
--341908
--341909
--341910
已經退出---
java.lang.InterruptedException
	at guoxw.ThreadTest1.run(ThreadTest1.java:13)

	

  4:休眠中退出線程線程

在休眠中中止線程;

public class ThreadTest2  extends Thread {
	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();
		try {
			System.out.println("beagin--");
			Thread.sleep(20000);
			System.out.println("end--");
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			System.out.println("進入catch-"+this.isInterrupted());
			e.printStackTrace();
		}
	}

}





	public static void main(String[] args) {
		
		ThreadTest2 th=new ThreadTest2();
		th.start();
		
		try {
			
			th.interrupt();
			
		} catch (Exception e) {
			
			e.printStackTrace();
		}

	}





	
beagin--
進入catch-false
java.lang.InterruptedException: sleep interrupted
	at java.lang.Thread.sleep(Native Method)
	at guoxw.ThreadTest2.run(ThreadTest2.java:10)
	

  5:Stop 暴力退出線程code

stop 暴力中止
	
	public class ThreadTest3 extends Thread{

	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();
		while(true){
			System.out.println("輸出信息--");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				System.out.println("進入catch");
			}
		}
	}
}




public static void main(String[] args) {
		
		ThreadTest3 th=new ThreadTest3();
		th.start();
		
		try {
			Thread.sleep(6000);
			th.stop();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	
	
	
log:
輸出信息--
輸出信息--
輸出信息--
輸出信息--
輸出信息--

注意:使用stop釋放鎖會給數據形成不一致性的結果。

 6: 使用return 中止線程blog

 

public class ThreadTest4  extends Thread{

	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();
		while(true){
			
			if(this.isInterrupted()){
				System.out.println("中止了----");
				return;
			}
			
			System.out.println("是否繼續執行了?");
		}
	}
}




public static void main(String[] args) {
		
		ThreadTest4 th=new ThreadTest4();
		th.start();
		
		try {
			Thread.sleep(6000);
			th.interrupt();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	
	
	
是否繼續執行了?
是否繼續執行了?
是否繼續執行了?
是否繼續執行了?
中止了----
相關文章
相關標籤/搜索