如何定期从main方法执行runnable类?

时间:2018-01-22 23:21:25

标签: java multithreading

我有一个班级Clock,其代码如下。我想每隔x秒执行Clock中的run方法。但我希望这是从Main方法启动的,而不是从Clock类本身启动的。

简而言之,Clock将用于模拟CPU中的时钟单元。每隔x秒,Clock类的状态将在10之间变化,从而导致程序其余部分的状态发生变化。程序的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
    }
}

1 个答案:

答案 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);