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。