在继续之前如何让Java等待方法完成?

 ndo2205188 发布于 2023-02-02 19:38

所以我的问题是我需要这些方法一个接一个地运行,但我无法弄清楚如何使方法在运行之前等待.任何帮助表示赞赏.谢谢.这是我的代码:

public void startMoving() throws InterruptedException
{
    moveEnemy("right",3);
    wait();
    moveEnemy("down",3);
    wait();
    moveEnemy("right",2);
    wait();
    moveEnemy("up",1);
    wait();
    moveEnemy("right",2);
    wait();
    moveEnemy("up",2);
    wait();
    moveEnemy("right",2);
    wait();
    moveEnemy("down",4);
    wait();
    moveEnemy("left",1);
    wait();
    moveEnemy("down",2);
    wait();
    moveEnemy("right",3);
    wait();
    moveEnemy("up",2);
    wait();
    moveEnemy("right",1);
    wait();
    moveEnemy("up",1);
    wait();
    moveEnemy("right",3);
}
public void moveEnemy(final String direction, final int numMoves)
{
    Thread moveThread = new Thread(new Runnable()
    {
        public void run()
        {
            isMoving = true;
            int originalX = getX();
            int originalY = getY();
            for(int loop = 0; loop <= 98*numMoves; loop++)
            {
                try 
                {
                    Thread.sleep(5);
                } 
                catch (InterruptedException e){}
                if(direction.equals("up"))
                {
                    setLocation(originalX,originalY+loop);
                }
                if(direction.equals("down"))
                {
                    setLocation(originalX,originalY-loop);
                }
                if(direction.equals("left"))
                {
                    setLocation(originalX-loop,originalY);
                }
                if(direction.equals("right"))
                {
                    setLocation(originalX+loop,originalY);
                }
            }
            try 
            {
                Thread.sleep(50);
            } 
            catch (InterruptedException e){}
            notify();
        }
    });
    moveThread.start();

Anedar.. 6

最简单的解决方案可能是不使用线程,但我怀疑这是你想要的.

您可能正在寻找的是锁的概念:

方法可以通过调用以下方式获取与对象关联的锁:

synchronized(nameOfTheLockObject) {
    //do some code here
}

这将获取给定Object的锁定,执行代码并在之后释放锁定.如果锁已经被另一个方法/线程获取,则代码暂停,直到另一个方法/线程释放锁.

您还可以将synchronized语句添加到类的方法中,以使它们获取父对象的锁.

有关这方面的更多信息,请访问:http: //docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html

1 个回答
  • 最简单的解决方案可能是不使用线程,但我怀疑这是你想要的.

    您可能正在寻找的是锁的概念:

    方法可以通过调用以下方式获取与对象关联的锁:

    synchronized(nameOfTheLockObject) {
        //do some code here
    }
    

    这将获取给定Object的锁定,执行代码并在之后释放锁定.如果锁已经被另一个方法/线程获取,则代码暂停,直到另一个方法/线程释放锁.

    您还可以将synchronized语句添加到类的方法中,以使它们获取父对象的锁.

    有关这方面的更多信息,请访问:http: //docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html

    2023-02-02 19:41 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有