我如何在 java 中执行特定时间的代码?
How can i execute code for a specific amount of time in java?
我想在侦听事件的方法内部执行一些代码,比方说 5 秒。
我尝试过使用 Threads,但无法使其正常工作。
这是我现在的代码,它只是一个侦听器,当检测到带有 if 语句中的字符串的消息时触发:
if (message != null){
if (message.equalsIgnoreCase("w")){
}
}
此检查每秒 运行,所以我不知道“while”语句是否有效
只是一个想法,不适合部署,但应该给你一个起点
//record start time
long start=System.currentTimeMillis();
//keep running until 5000ms[5s] have
//elapsed since the start
while(System.currentTimeMillis()-start<=5000)
{
//Do some stuff here
}
如果您的事件处理程序与您的系统在同一个线程中执行,那么这将阻塞您的系统 5 秒,并阻止它在这段时间内处理其他事件。
所以最好将事件分派到单独的线程或在单独的线程中执行上述逻辑
一种简单的方法是简单地在循环中执行代码并检查每次迭代是否达到了 timing-threshold,例如:
// necessary imports for using classes Instant and Duration.
import java.time.Instant;
import java.time.Duration;
// ...
// start time point of your code execution.
Instant start = Instant.now();
// targeted duration of your code execution (e.g. 5 sec.).
Duration duration = Duration.ofSeconds(5);
// loop your code execution and test in each iteration whether you reached your duration threshold.
while (Duration.between(start, Instant.now()).toMillis() <= duration.toMillis())
{
// execute your code here ...
}
我想在侦听事件的方法内部执行一些代码,比方说 5 秒。 我尝试过使用 Threads,但无法使其正常工作。
这是我现在的代码,它只是一个侦听器,当检测到带有 if 语句中的字符串的消息时触发:
if (message != null){
if (message.equalsIgnoreCase("w")){
}
}
此检查每秒 运行,所以我不知道“while”语句是否有效
只是一个想法,不适合部署,但应该给你一个起点
//record start time
long start=System.currentTimeMillis();
//keep running until 5000ms[5s] have
//elapsed since the start
while(System.currentTimeMillis()-start<=5000)
{
//Do some stuff here
}
如果您的事件处理程序与您的系统在同一个线程中执行,那么这将阻塞您的系统 5 秒,并阻止它在这段时间内处理其他事件。
所以最好将事件分派到单独的线程或在单独的线程中执行上述逻辑
一种简单的方法是简单地在循环中执行代码并检查每次迭代是否达到了 timing-threshold,例如:
// necessary imports for using classes Instant and Duration.
import java.time.Instant;
import java.time.Duration;
// ...
// start time point of your code execution.
Instant start = Instant.now();
// targeted duration of your code execution (e.g. 5 sec.).
Duration duration = Duration.ofSeconds(5);
// loop your code execution and test in each iteration whether you reached your duration threshold.
while (Duration.between(start, Instant.now()).toMillis() <= duration.toMillis())
{
// execute your code here ...
}