如何在设定的时间内连续无延迟地在TimerTask内运行一组特定的指令?以下是我试图实现上述代码的代码。
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
System.out.println("Test started at: " + new Date());
// Do something continuously without delay
System.out.println("Test finished at: " + new Date());
}
}, 0);
答案 0 :(得分:1)
schedule
方法的第二个参数是开始计时器任务的时间(或相对于现在的延迟),而不是计时器执行的时间长度。
你的问题并不完全清楚,但我假设你希望将来在特定时间(或相对于现在的延迟)开始和停止任务。如果是这样,我接近这个的方法是创建一个Thread
来完成你需要的任务。由于TimerTask
是Runnable
,Thread
在Timer
启动后以TimerTask
执行,因此您只需使用该Runnable
的实例即可。确保running
包含public void run() {
while(running) { /* do my task */ }
}
之类的可设置字段。在该Thread中,在while循环中运行您的任务,如下所示:
Timer
然后,使用一个Runnable
安排running
在您需要时开始。使用另一个Timer在您希望它停止时将同一个Thread的running
参数设置为false。 class StoppableTimerTask extends TimerTask {
private volatile boolean running = true;
public void stopRunning() { this.running = false; }
public void run() {
while(running) { /* do my task */ }
}
}
final StoppableTimerTask task = new StoppableTimerTask();
timer.schedule(task, startTime);
timer.schedule(new TimerTask() {
public void run() {
task.stopRunning();
}
}, stopTime);
参数应该是volatile,以确保第一个计时器Thread立即看到对第二个计时器Thread的更改。所以它看起来像这样(未经测试):
running
根据您的“内容”,您可能还需要查看线程中断。例如,如果它正在执行阻塞IO,则代码将不会循环并检查TimerTask
值,直到阻塞IO完成。中断线程(可能)会导致这种情况发生。见http://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#interrupt--。这可能会也可能不会起作用,并且可能很难做到正确,所以如果你需要这个线程尽可能接近所需的时间退出,那么更喜欢运行阻塞I / O和类似的操作以及更小的超时,这样线程可以检查是否应继续更频繁地运行。
更新:根据指示任务应立即开始的评论,它变得更加简单。初始任务甚至不需要扩展Thread
- 它可以是立即启动的常规<html>
<head>
<link rel="stylesheet" href="bootstrap/css/bootstrap.css"/>
<script type="text/javascript" src="jquery.js">
</script>
<script type="text/javascript" src="bootstrap/js/bootstrap.js">
</script>
<TITLE>
New Registration Form
</TITLE></head>
<body>
<center>
<br>
<p style="font-weight: bold; font-size: 30">Please Fill Out Your Information Sheet</p><p><?php
echo date('F j, Y, g:i a', time()+25200);
?></p>
<form method="POST" action="add.php">
<!--<input type="text" name="new_fname" class="Form-Control" placeholder="First Name" id="fname" required>-->
<input type="text" name="new_fname" class="Form-Control" placeholder="First Name" id="fname" required>
<input type="text" name="new_mname" class="Form-Control" placeholder="Middle Initial" id="mname" required>
<input type="text" name="new_lname" class="Form-Control" placeholder="Last Name" id="lname" required><br><br>
Select Your gender
<select name="new_gender">
<option value=""></option>
<option value="Male">Male</option>
<option value="Female">Female</option>
</select>
Select Your Status
<select name="new_status">
<option value=""></option>
<option value="New">New</option>
<option value="Old">Old</option>
<option value="Transferee">Transferee</option>
<option value="Shiftee">Shiftee</option>
</select>
Select Your Course
<select name="new_course">
<option value=""></option>
<option value="BSINFOTECH">BSINFOTECH</option>
<option value="BSIS">BSIS</option>
<option value="BSCOMTECH">BSCOMTECH</option>
</select>
<br><br>
<input type="text" name="new_age" class="Form-Control" placeholder="Age" id="age" required><br><br>
<input type="text" name="new_bp" class="Form-Control" placeholder="Birth Place" id="bp" required><br><br>
<input type="text" name="new_add" class="Form-Control" placeholder="Address" id="add" required><br><br>
<input type="text" name="new_nat" class="Form-Control" placeholder="Nationality" id="nat" required><br><br>
<input type="text" name="new_rel" class="Form-Control" placeholder="Religion" id="rel" required><br><br>
<input type="text" name="new_tel" class="Form-Control" placeholder="Tel. No." id="tel" required><br><br>
<input type="text" name="new_cel" class="Form-Control" placeholder="Cel. No." id="cel" required><br><br>
<input type="text" name="new_mail" class="Form-Control" placeholder="E-mail Address" id="mail" required><br><br>
<button onclick="parent.location='req.php'" type="submit" name="next">Next</button>
<button type="submit" class="btn" name="save" value="save">Save</button>
</form>
</body>
</html>
。只需要在指定的未来时间停止计时器。