Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(Java)添加到计数器变量的代码_Java_Counter_Ticker - Fatal编程技术网

(Java)添加到计数器变量的代码

(Java)添加到计数器变量的代码,java,counter,ticker,Java,Counter,Ticker,我正在尝试在我当前的java项目中使用一个计时器,它在无限循环中每n微秒(例如,500,每秒1/2)向一个整数变量添加1,以便在程序运行时始终运行。 以下是我目前拥有的代码: public class Ticker { public int time = 0; long t0, t1; public void tick(int[] args) { for (int i = 2; i < 1; i++) {

我正在尝试在我当前的java项目中使用一个计时器,它在无限循环中每n微秒(例如,500,每秒1/2)向一个整数变量添加1,以便在程序运行时始终运行。 以下是我目前拥有的代码:

public class Ticker
{
    public int time = 0;
    long t0, t1;

    public void tick(int[] args)
    {
        for (int i = 2; i < 1; i++)
        {
            t0 = System.currentTimeMillis();
            do
            {
                t1 = System.currentTimeMillis();
            }
            while (t1 - t0 < 500);
            time = time + 1;
        }
    }
}
公共类股票代码
{
公共整数时间=0;
长t0,t1;
公共无效勾号(int[]args)
{
对于(int i=2;i<1;i++)
{
t0=System.currentTimeMillis();
做
{
t1=System.currentTimeMillis();
}
而(t1-t0<500);
时间=时间+1;
}
}
}

每个人对我的最后一个问题都很有帮助,希望这一个问题同样简单,因为它会浪费CPU周期等待下一次唤醒,所以效率很低。如果我是你,我会用

至于当前代码不起作用的原因,您的
for
循环条件已关闭,因此从未进入循环


要使计时器代码与程序中的任何其他逻辑同时运行,您需要研究线程。

您拥有的是相当低效的,因为它浪费了等待下一次唤醒的CPU周期。如果我是你,我会用

至于当前代码不起作用的原因,您的
for
循环条件已关闭,因此从未进入循环

要使计时器代码与程序中的任何其他逻辑同时运行,您需要研究线程。

我想您需要

Thread.sleep(500);
目前,您正在消耗等待500毫秒的CPU周期(您提到的是微秒,但我相信您需要毫秒)。上述操作会使当前线程休眠500毫秒,并且进程不会消耗任何CPU(或者至少会消耗最少的CPU—垃圾收集仍在运行)。如果在运行您的版本时观察CPU,您应该会看到差异

有关更多信息,请参阅。

我想您需要

Thread.sleep(500);
目前,您正在消耗等待500毫秒的CPU周期(您提到的是微秒,但我相信您需要毫秒)。上述操作会使当前线程休眠500毫秒,并且进程不会消耗任何CPU(或者至少会消耗最少的CPU—垃圾收集仍在运行)。如果在运行您的版本时观察CPU,您应该会看到差异


有关更多信息,请参阅。

听起来您可能想研究多线程。如果你这样搜索,你会发现几个好的问答线索。web上的其他地方也有教程…

听起来您可能想研究多线程。如果你这样搜索,你会发现几个好的问答线索。网上其他地方也有教程…

如果您需要在不同的线程中完成,请查看:


请注意,上面的代码不能使用局部变量(它们必须声明为
final
,才能在匿名类中访问它们)。但是,它可以是一个成员。

如果需要在其他线程中执行此操作,请查看:


请注意,上面的代码不能使用局部变量(它们必须声明为
final
,才能在匿名类中访问它们)。不过,它也可以是一个成员。

看看,或者更好。它们使您能够定期执行某些操作,并处理围绕这些操作的计算。

请看一看或更好。它们使您能够定期执行某些操作并处理围绕这些操作的计算。

下面是一个可比较的
ScheduledExecutorService
示例,它将以500毫秒的间隔更新
时间
变量:

ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);

exec.scheduleAtFixedRate(new Runnable(){
    private int time = 0;

    @Override
    public void run(){
        time++;
        System.out.println("Time: " + time);
    }
}, 0, 500, TimeUnit.MILLISECONDS);

.

这里是一个可比较的
ScheduledExecutorService
示例,它将以500毫秒的间隔更新
时间
变量:

ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);

exec.scheduleAtFixedRate(new Runnable(){
    private int time = 0;

    @Override
    public void run(){
        time++;
        System.out.println("Time: " + time);
    }
}, 0, 500, TimeUnit.MILLISECONDS);

.

您这里有什么具体问题吗?您这里有什么具体问题吗?