如何在 java 中暂停预先实现的 Runnable class?

How to pause a pre-implemented Runnable class in java?

我有以下 animator class 实现了 Runnable(在 JUNG documentation 中提到)。

如何判断 thread ,如果某些条件为真 pause 一段时间然后 start 运行?

    switch (args[0]) 
    {
        case "agent":
            int size=nodeAttributes.size();
            int i;
            for(i=0;i<size;i++)
            {
                if(args[1].equals(nodeAttributes.get(i).nodeName))
                {
                    VertexCollider vtxCol = new VertexCollider(layout, panel,args[1], args[2] , args[1] , nodeAttributes.get(i));
                    vtxCol.setMaximumIterations(1000);
                    vtxCol.setDesiredPrecision(1);
                    vtxCol.initialize();
                    Animator  animator = new Animator(vtxCol);

                    animator.start();
                    if(nodeAttributes.get(i).isMoving)
                    {
                        animator.stop();
                        animator.wait(10000);
                        System.out.println("stopped");
                    }
                    nodeAttributes.get(i).isMoving = true;
                    break;  
                }
            }
            break;
    }

放置在任何你想让程序休眠的地方:(在 if 语句中?)

try {
    Thread.sleep(1);
} catch (InterruptedException e) {
    e.printStackTrace();
}

这将告诉线程休眠多少毫秒。

正在做:

do{

    try {
        Thread.sleep(1);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

}while(something() == true);

这将继续检查该值,直到它为假。

根据您引用的文档,Animator 可以在迭代循环之间暂停一定时间。

animator.setSleepTime(10000);

然后当暂停条件结束时,您可以将休眠时间设置为更短的间隔。

但是,您似乎希望 Animator 在暂停条件为真时完全停止。在那种情况下,我建议您 stop() 当时的动画师(正如您的代码所做的那样),然后在暂停条件结束时再次 start() 它。看来您可以重复调用停止和启动方法。

如果你想暂停 animator 你必须先将 animator 对象和 vtxCol 对象初始化移动到另一个 Thread.Because 即使 Thread.sleep() 函数或 wait() 函数即将为您的目的工作,他们将停止函数初始化 animator 也可能不符合您的需要。

animator 对象创建移动到另一个单独的线程后,您必须考虑创建一些 LinkedListArray 或某种 Collection 来保存您的运动数据命令由它们初始化vtxColanimator对象,并将数据传递给线程。然后在 Thread.sleep() 函数中可以在创建的单独线程中回答您的需要。