我有一个循环,他的工作是充当阻塞命令,每秒执行一次shell命令。 Java警告说“在循环中睡觉”。这是代码:
while (!Shell.silentShellCommand(stringCommand).contains("Device detected")) {
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
log.errorHandler(ex);
}
}
当然有更好的方法可以做到这一点。我只是不知道如何。制作“阻塞计时器方法”的正确方法是什么?我正在使用它暂停执行,直到用户执行某些操作。
答案 0 :(得分:2)
如果你想每秒执行一次,有更好的方法:
首先创建一个计时器:
Timer timer = new Timer();
然后安排固定时间执行:
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Your repeatable execution here
}
}, 1000, 1000);
就是这样。希望我能提供帮助。
答案 1 :(得分:1)
为什么不这样做:
public void loopMethod(){
if(!Shell.silentShellCommand(stringCommand).contains("Device detected")){
try {
Thread.sleep(1000);
} catch(InterruptedException ex) {
ex.printStackTrace();
}
loopMethod();
}
}
然后从后台线程调用该方法。那会有用吗?我的意思是,它在技术上仍然是一个循环,但由于某种原因它看起来更干净!
答案 2 :(得分:0)
经典变体是使用wait()
//等待线程
synchronized (mutex) {
wait();
}
//其他线程会在服务员醒来时通知
synchronized (mutex) {
notify();
}
如果您的任务是定期执行代码,那么您将使用TimerTask
例子见Giovanni的回答