我有四种方法,它们必须一个接一个地执行。因此,这意味着第二种方法必须等到第一种方法完全执行。
在我的情况下,我的IfElse
语句中有以下方法。它们的执行就像第二种方法在第一种方法中执行了一部分后执行一样。就像异步方式一样。
if(flag.equalsIgnoreCase("flag2"))
{method1();
}else if(flag.equalsIgnoreCase("flag3")){
method2();
}else if(flag.equalsIgnoreCase("flag4"))
{ method3();
}
setCommonData();
setRecyclerAdapter();
及以下是我添加了同步关键字之后的方法实现。
synchronized void method1()
{
Log.e("filter","======");
Class 1 class1=new Class1(this,GET,response->{
Log.e("response",""===success====);
});
NetworkManager.getInstance(this).sendRequest(class1);
}
其余方法与method 1
实现相同。
我还通过在onBackground
和onPostExecute
中调用两个方法来使用AsyncTasks。
我已经将线程与t.start()
和t.join();
一起使用。但是同样那些异步调用。
就我而言,我需要一个一个地执行这些方法。请一些帮助我解决这个问题。
答案 0 :(得分:1)
从不同线程调用这些方法时,可以在方法声明中添加synchronized
关键字,以使method2等到method1返回:
synchronized void method1() { ...code for method1... }
synchronized void method2() { ...code for method2... }
synchronized void method3() { ...code for method3... }
synchronized
关键字使线程在当前对象的监视器上获得排他锁。如果另一个线程已经持有该锁,则新调用将等待,直到锁释放为止。不使用synchronized
关键字的方法不会受到影响,因为它们不需要锁。
一种可能更简单的解决方案是首先不要使用不同的线程。如果您只使用一个线程池,那么一个方法调用自然必须等待前一个方法完成。但是,为了向您展示如何做到这一点,您首先应该向我们展示如何首先调用这些方法。
答案 1 :(得分:0)