0
我有以下代码: Controller.java:定时器和线程问题
package Test;
import java.applet.Applet;
import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Controller extends Applet implements Runnable, KeyListener {
private Robot robot = new Robot();
@Override
public void init() {
setSize(800, 480);
setBackground(Color.BLACK);
setFocusable(true);
addKeyListener(this);
}
@Override
public void start() {
Thread thread = new Thread(this);
thread.start();
}
public void run() {
try {
Thread.sleep(17);
} catch (InterruptedException e) {
e.printStackTrace();
}
... Do Stuff ....
}
@Override
public void destroy() {
// TODO Auto-generated method stub
super.destroy();
}
@Override
public void stop() {
// TODO Auto-generated method stub
super.stop();
}
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_CONTROL:
robot.fire();
break;
}
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
Robot.java
package Test;
import java.util.Timer;
import java.util.TimerTask;
public class Robot {
private Timer timer = new Timer();
private int firerate = 2500;
public Robot() {
}
public void fire() {
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("2 Seconds!");
}
}, firerate);
}
}
我有它运行在17毫秒的时间间隔更新线程。
在Robot类我让机器人做一些2.5秒CTRL后,每按一次,
我的问题如下: 由于线程的主类是使用和定时器在Robot类中使用(都实现run()函数):
一个。这两种方法是否会相互打断?
b。将这两者结合使用有什么优点/缺点?
c。有没有一种方法可以使用Thread来调度这类任务?
在此先感谢。
“......在17毫秒的时间间隔,其更新”,在您的示例Controller.run()方法不显示的循环。它睡一会儿17毫秒,然后它做东西。 – 2014-09-29 19:24:39
如果您想每17毫秒执行一次任务,那么您可能不想在循环中休眠17毫秒。这将在一次执行的结束和下一次执行的开始之间等待17毫秒。这个周期不仅会长于17毫秒,还可能是可变的。 (取决于任务)。考虑使用ScheduledExecutorService.scheduleAtFixedRate()来代替。 – 2014-09-29 19:29:07