首页 > 编程语言 > 详细

线程的停止退出操作

时间:2018-03-22 00:10:26      阅读:165      评论:0      收藏:0      [点我收藏+]

1:code

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     

  和1对比

 

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: 异常抛出法退出线程

/****  异常抛出法退出线程 ********/

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 暴力退出线程

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 停止线程

 

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();
		}

	}
	
	
	
是否继续执行了?
是否继续执行了?
是否继续执行了?
是否继续执行了?
停止了----

  

 

线程的停止退出操作

原文:https://www.cnblogs.com/galibujianbusana/p/8620627.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!