我有一个班级Clock
,其代码如下。我想每隔x秒执行Clock中的run方法。但我希望这是从Main方法启动的,而不是从Clock类本身启动的。
简而言之,Clock将用于模拟CPU中的时钟单元。每隔x秒,Clock类的状态将在1
和0
之间变化,从而导致程序其余部分的状态发生变化。程序的Main方法将创建一个Clock对象,这将在后台定期执行,直到程序终止。
我已经阅读了ScheduledExecutorService
,我认为这是理想的,但是这只能用于执行单个可运行对象,而不是整个可运行的类。
无论如何,从位于单独类中的Main方法每隔x秒执行我的Clock类吗?
时钟课
public class Clock implements Runnable{
private int state = 0; //the state of the simulation, instrutions will execute on the rising edge;
private float executionSpeed; //in Hz (executions per second)
private String threadName = "Clock";
public Clock(float exeSpeed)
{
executionSpeed = exeSpeed;
System.out.println("[Clock] Execution speed set to " + executionSpeed + "Hz. (" + (1/executionSpeed) + " instructions per second.)");
}
public void run()
{
System.out.println(threadName + " executed.");
toggleState();
}
public void toggleState()
{
if(state == 1)
{
state = 0;
}
else if(state == 0)
{
state = 1;
}
}
public float getExecutionSpeed()
{
return executionSpeed;
}
}
我想从这里定期执行Clock:
public class Main {
public static void main(String[] args)
{
float period = 1.0;
Clock clockUnit = new Clock(period);
//execute clock.run() every 1.0 seconds
}
}
答案 0 :(得分:2)
你看过java.util.Timer吗?这将允许您定期执行TimerTask。
您需要更改类Clock以扩展TimerTask。
float period = 1.0f;
Clock clockUnit = new Clock(period);
Timer timer = new Timer();
timer.scheduleAtFixedRate(clockUnit, 0, 1000);