java停止线程

/**
 * 简单情况下可以使用退出标志来停止线程,但如果线程处于阻塞状态,退出标志无
 * 法被及时察觉,则线程就无法停止;因此在使用退出标志的同时也要使用interrupt()
 *
 * @author yangww
 */
public class main_test {


	public static void main(String[] args) throws InterruptedException {
		MyThread m1 = new MyThread();//同一个m1只能被启动一次,停止线程并不是说它可以重新启动;
		m1.start();


		Thread.sleep(5000);
		// System.out.println("使用停止标志终止线程");
		// m1.stop = true; // 设置共享变量为true


		System.out.println("使用interrupt()终止线程");
		// interrupt()方法不会中断一个正在运行的线程,但它可以使一个被阻塞的线程抛出一个中断异常,在此异常里,可以设置退出标志,从而使用线程退出;
		m1.interrupt();
	}
}


class MyThread extends Thread {
	// 此任务可能被多个线程同时执行,stop作为多线程共享的同步变量。
	volatile boolean stop = false;// 退出标志,注:如果线程处于阻塞状态,则退出标志不会被及时更新,线程将无法退出;


	public void run() {
		while (!stop) {
			try {
				System.out.println("我在执行---");
				sleep(1000);
			} catch (InterruptedException e) {
				System.out.println("接到InterruptedException,准备更新线程退出标志");
				stop = true; // 在异常处理代码中修改共享变量的状态
			}
		}
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值