线程的停止

package concurrency.sharingobject;

/**
 * 
 * @author Administrator
 *	对于线程的停止 ,我们可以用两种方法
 *	1 .定义开关变量 ,但这种方法有缺陷 ,对于正处于阻塞状态的线程无法执行中断操作
 *		 while(!stopped){
 *			while(xx)
 *			   wait();	
 *		 }
 	2.利用中断的中断,在线程阻塞时,我们可以向其发出一个中断请求,收到请求后,线程会以一个
 	 InterruptedExeption进行响应,而我们可以在异常中进行线程的停止 
 	 	while(!stopped){
 	 		try{
 	 		  while(xx)
 	 		   wait()
 	 		}catch(InterrupedException e){
 	 		  stopped = true;
 	 		}
 	 	}
 	3.将上面两种方法结合起来 
 	  	while(!stopped){
 	  		try{
 	  	           while(xx)
 	  	            wait()
 	  		}catch(InterruptedException e){
 	  		   if(stopped ==true)break;
 	  		}
 	  	}
 	终止方法就是  将 stopped = true,然后向线程发出一个中断请求
 	
 	下面这个类的功能是在任意时间都可以停止线程(该线程执行+1操作,到大于 3时将等待)
 	
 */
public class ThreadTest {
    static volatile boolean stopped;
    static int count=1  ;

    public static void main(String args[]) throws InterruptedException {
	final Object lock = new Object();
	Thread t = new Thread("t") {
	    @Override
	    public void run() {
		while (!stopped) {
		    synchronized (lock) {
			try {
			    Thread.sleep(1000 * 1);// 1s
			    while (count > 3)
				lock.wait();
			} catch (InterruptedException e) {
			   if(stopped)break;
			}
			System.out.println(Thread.currentThread().getName()
				+ count);
			count++;
		    }
		}
	    }
	};
	t.start();
	t.setPriority(Thread.MIN_PRIORITY);
	Thread.sleep(1000 * 1);
	stop(t);
    }

    public static void stop(Thread t) {
	stopped = true;
	t.interrupt();
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值