timer启动停止 thread启动停止

》定时任务启动停止《

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TimerTest {
	private static Timer timer = new Timer();
	private static long start_ms = System.currentTimeMillis();

	public static void main(String[] args) {

		System.out.println("定时程序启动,时间:" + new Date());

		timer.schedule(new TimerTask() {
			public void run() {
				System.out.println("定时任务执行,时间:" + new Date());
				long now_ms = System.currentTimeMillis();
				boolean canFlag = (now_ms - start_ms) > 1000 * 60;
				if (canFlag) {
					System.out.println("定时任务取消,时间:" + new Date());
					timer.cancel();
				}
			}
		}, 1000 * 5, 1000 * 10);

	}
}


运行结果=======================

定时程序启动,时间:Thu Nov 07 11:53:27 CST 2013
定时任务执行,时间:Thu Nov 07 11:53:32 CST 2013
定时任务执行,时间:Thu Nov 07 11:53:42 CST 2013
定时任务执行,时间:Thu Nov 07 11:53:52 CST 2013
定时任务执行,时间:Thu Nov 07 11:54:02 CST 2013
定时任务执行,时间:Thu Nov 07 11:54:12 CST 2013
定时任务执行,时间:Thu Nov 07 11:54:22 CST 2013
定时任务执行,时间:Thu Nov 07 11:54:32 CST 2013
定时任务取消,时间:Thu Nov 07 11:54:32 CST 2013

运行结果=======================

》线程启动停止《


发现一篇博文,看到晚了,尤其是第2、3页,水平比我这强多了...http://developer.51cto.com/art/200812/100482.htm


线程停止有API

thread.stop();// 废弃

thread.interrupt();// 可能抛出中断异常

最好就是让线程自然的结束,

这种一般是run()方法里写while循环的情况,

如果run方法里写的不是循环,而是一次操作(非重复执行),

而这种操作可能很耗时,超过忍耐点之后要提前结束,这时可调用thread.interrupt();



import java.util.Date;

public class ThreadTest implements Runnable {

	private boolean stopFlag = false;

	@Override
	public void run() {
		while (!stopFlag) {
			try {
				System.out.println("模拟耗时操作..." + new Date());
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	public boolean isStopFlag() {
		return stopFlag;
	}

	public void setStopFlag(boolean stopFlag) {
		this.stopFlag = stopFlag;
	}

	public static void main(String[] args) {
		ThreadTest tt = new ThreadTest();
		Thread thread = new Thread(tt);
		System.out.println("开始线程!" + new Date());
		thread.start();

		long start = System.currentTimeMillis();
		while (true) {
			long end = System.currentTimeMillis();
			boolean breakFlag = (end - start) > 30 * 1000;
			if (breakFlag) {
				System.out.println("结束线程!" + new Date());
				tt.setStopFlag(breakFlag);
				break;
			}
		}
	}
}

运行结果=======================

开始线程!Thu Nov 07 12:17:08 CST 2013
模拟耗时操作...Thu Nov 07 12:17:09 CST 2013
模拟耗时操作...Thu Nov 07 12:17:11 CST 2013
模拟耗时操作...Thu Nov 07 12:17:13 CST 2013
模拟耗时操作...Thu Nov 07 12:17:15 CST 2013
模拟耗时操作...Thu Nov 07 12:17:17 CST 2013
模拟耗时操作...Thu Nov 07 12:17:19 CST 2013
模拟耗时操作...Thu Nov 07 12:17:21 CST 2013
模拟耗时操作...Thu Nov 07 12:17:23 CST 2013
模拟耗时操作...Thu Nov 07 12:17:25 CST 2013
模拟耗时操作...Thu Nov 07 12:17:27 CST 2013
模拟耗时操作...Thu Nov 07 12:17:29 CST 2013
模拟耗时操作...Thu Nov 07 12:17:31 CST 2013
模拟耗时操作...Thu Nov 07 12:17:33 CST 2013
模拟耗时操作...Thu Nov 07 12:17:35 CST 2013
模拟耗时操作...Thu Nov 07 12:17:37 CST 2013
结束线程!Thu Nov 07 12:17:39 CST 2013

运行结果=======================


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值