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