java线程之sleep、interrupt方法

下面是一个测试interrupt方法的小代码:

package cn.edu.ustc.thread;

import java.util.Date;

public class TestInterrupt {
	public static void main(String[] args){
		MyThread thread = new MyThread();
		thread.start();
		try{Thread.sleep(10000);}
		catch(InterruptedException e){
			
		}
		thread.interrupt();
	}
}
class MyThread extends Thread{
	public void run(){
		while(true){
		System.out.println("==="+ new Date()+"===");
		try {
			sleep(1000);
		} catch (InterruptedException e) {
			return;
		}
	}
	}	
}
interrupt方法相当于线程睡着的时候“泼凉水”,在上面代码中,主线程睡醒之后,调用thread线程的interrupt方

法,catch到InteruptedException,return,程序运行结束,即子线程结束。这是停住线程的一种方法。但是不好,

因为可能导致子线程运行过程中有些资源来不及关闭。

对上述代码稍作改进如下:

package cn.edu.ustc.thread;

import java.util.Date;

public class TestInterrupt {
	public static void main(String[] args){
		MyThread thread = new MyThread();
		thread.start();
		try{Thread.sleep(10000);}
		catch(InterruptedException e){
			
		}
		thread.setFlag(false);
	}
}
class MyThread extends Thread{
	private boolean flag = true;
	public void run(){
		while(flag){
		System.out.println("==="+ new Date()+"===");
		try {
			sleep(1000);
		} catch (InterruptedException e) {
			return;
		}
	}
	}
	public boolean isFlag() {
		return flag;
	}
	public void setFlag(boolean flag) {
		this.flag = flag;
	}	
}
稍做说明:给线程增加一个标志位flag,通过改变flag的状态控制线程,这样会比上面稍微好一点。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值