java中线程的使用

jiangbo578 发布于 2015/05/25 10:15
阅读 300
收藏 1
java线程设置在某个指定的时间运行一次,然后又在某个指定的时间停止,这个程序要怎么写?
加载中
0
vvtf
vvtf
/**
 * 5秒钟后运行FnRun,并且每隔1秒钟进行启动新线程任务进行FnRun。
 * scheduleWithFixedDelay则是当上一个任务完成后再相隔1秒钟(period)执行。
 * scheduleAtFixedRate为不管FnRun执行完成否,都相隔1秒钟(period)再执行新任务。
 * 10秒钟过后运行FnOver,并且退出线程,但是FnRun的线程只有跑完但是不会新增了。
 * 也可使用CyclicBarrier
 * 详见java.util.concurrent.CountDownLatch
 * java.util.concurrent.CyclicBarrier
 * @throws Throwable
 */
public static void useCountDownLatch()  throws Throwable {
	System.out.println("Begin: " + new Date());
	final CountDownLatch down = new CountDownLatch(1);
	ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
	final ScheduledFuture<?> sche = scheduler.scheduleAtFixedRate(new Runnable() {
		// FnRun
		@Override
		public void run() {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println("Run : " + new Date());
		}
	}, 5, 1, TimeUnit.SECONDS);
	
	scheduler.schedule(new Runnable() {
		// FnOver
		@Override
		public void run() {
			sche.cancel(true);
			down.countDown();
			System.out.println("Over!!");
		}
	}, 10, TimeUnit.SECONDS);
	down.await();
	scheduler.shutdown();
}



1
B
BlueWoods

如果只是在指定的时间运行一次,可以使用Timer,

schedule(TimerTask task, Date time)

如果执行运行一次,那么就不存在后续某个指定时间停止的问题;如果需要在指定的时间停止,那么我认为你的任务是多次运行的。如果可以使用quartz的话,可以配置cron任务;或者用Timer也可以简单的完成你的要求。

0
天巧星-浪子燕青
天巧星-浪子燕青
运行一次,就完了,为啥还要停止呢?
返回顶部
顶部