Java 等待方法完成后再次调用该方法

Java 等待方法完成后再次调用该方法,java,android,methods,Java,Android,Methods,我有一个方法,名为method1(),它可以“处理”我的ListView。这是从method2()调用的method2()可以非常频繁地运行(可能每秒钟一次)。我想我有一个问题,如果在method1()完成之前调用method2()(因此再次调用method1()),那么method1只运行一次,而不会第二次运行 有办法解决这个问题吗?我想在method1()中添加一个boolean,并在开始时将其设置为true,在结束时将其设置为false,但我想不出一种方法来实现这一点 编辑: 我做了更多的

我有一个方法,名为
method1()
,它可以“处理”我的
ListView
。这是从
method2()
调用的
method2()
可以非常频繁地运行(可能每秒钟一次)。我想我有一个问题,如果在
method1()
完成之前调用
method2()
(因此再次调用
method1()
),那么
method1
只运行一次,而不会第二次运行

有办法解决这个问题吗?我想在
method1()
中添加一个
boolean
,并在开始时将其设置为
true
,在结束时将其设置为
false
,但我想不出一种方法来实现这一点

编辑:


我做了更多的测试,该方法被连续调用,所以这个问题已经过时了。对此我深表歉意。

为方法1提供一个公共静态布尔值,并将其设置为false。如果你愿意,这可以称为“完成”。 方法1完成后,将该变量设置为true

方法2可以在method1调用之前运行while循环

while(method1.done==false){

}
方法1使函数同步:


这将确保在多线程环境中,只有一个线程可以同时访问函数。

为什么不使用TimerTask

Timer timer = new Timer();

        TimerTask tt = new TimerTask()
        {

            @Override
            public void run()
            {
                if(!isRunning)
                {
                    // Repeat You can update UI using runOnUiThread(runnable)
                }
                if(jobDone)
                {
                    this.cancel();

                }
            }
        };
        timer.schedule(tt, 0, 1);

只是个小把戏

你是多线程的吗?这决不能发生在单个线程上,因为执行是连续进行的。@我不在这种情况下<代码>方法2()是从广播接收器调用的。广播接收器是使用不同的请求代码多次“创建”的。即使在极少数情况下,自旋锁是合适的,此实现也不是线程安全的。我是否应该在“重复”部分添加一些内容,或者它是否自动重复?是的,它每1秒重复一次,并检查如果不运行,是否要运行方法,在方法开始时说set isRunning=true,在循环结束时说set isRunning=false,检查isRunning是否运行,如果!I运行然后再次重复您的方法如果任何时候您想退出,只需设置jobDone=true它就退出这对我不起作用,因为我无法从另一个线程修改ui。不过谢谢你的建议。好的,我仍然可以使用ui线程,但我不想使用计时器,因为它每秒钟都在不断检查。我有一个类似的使用处理程序的实现,但它只是减慢了每件事,所以我试图避免使用这种东西,所以我只是在方法中添加了
synchronized
,就是这样吗?是的,就是这样。但是请注意,调用
synchronized
方法要比调用普通方法消耗更多的CPU。