gpt4 book ai didi

java - 计时器和线程问题

转载 作者:行者123 更新时间:2023-12-01 12:28:58 25 4
gpt4 key购买 nike

我有以下代码: 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
}
}

机器人.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 毫秒的间隔运行更新。

在机器人类中,我让机器人在按下 CTRL 后每次执行 2.5 秒的操作

我的问题如下:由于Main类中使用Thread,Robot类中使用Timer(都实现了run()函数):

a.这两种方法会互相干扰吗?

b.将这两者一起使用有什么优点/缺点吗?

c.有没有办法使用 Thread 来调度这样的任务?

提前致谢。

最佳答案

a. Do those two methods interrupt each other?

没有。它们都在不同的线程中执行。他们过着自己的生活。

b. Are there any pros / cons in using those two together?

不是真的。您想要并发任务,这就是您所拥有的。

尝试使用 ExecutorService (从 Executors 构建)来运行 Runnable 以隔离任务及其并发执行的方式。

c. Is there a way to use Thread for scheduling tasks such as this?

是的,使用 ScheduledExecutorService :

ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
ses.scheduleAtFixedRate(controller, 0, 17, TimeUnit.SECONDS);

关于java - 计时器和线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26106297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com