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

时间:2015-01-18 04:54:24

标签: java multithreading thread-safety jung2

我有以下animator类来实现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;
    }

3 个答案:

答案 0 :(得分:1)

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

animator.setSleepTime(10000);

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

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

答案 1 :(得分:0)

放置程序要睡眠的位置:(在if语句中?)

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

这将告诉线程睡眠,无论你想要多少毫秒。

在do-while中:

do{

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

}while(something() == true);

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

答案 2 :(得分:0)

如果要暂停animator,必须先将animator对象和vtxCol对象初始化移动到另一个Thread.Because,因为即使Thread.sleep()函数或{ {1}}函数即将为您的目的而工作,它们将停止初始化wait()的功能,这可能不符合您的需求。

animator对象创建移动到另一个单独的线程后,您必须考虑创建一些animatorLinkedList或某种Array来保存您的移动数据,以便通过它们初始化CollectionvtxCol对象,并将数据传递给线程。然后在animator函数中可以在创建的单独线程中回答您的需求。