在我的应用程序中,我有两个线程(我正在使用AsyncTask类)。在我调用自己的doInBackground()
方法的每个线程的getNewsItems(Url url)
方法中,此方法将连接到服务器并获得响应。在每个帖子的onPostExecute()
方法中,我会调用displayData()
方法在屏幕上显示结果。
问题是当我运行时,应用程序崩溃了。我认为这是因为这两个线程可以同时访问常用方法,因为当我分离常用方法时,应用程序运行成功。我不知道是不是因为没有使用序列化?
谢谢
答案 0 :(得分:0)
当两个线程可以访问常用方法时,没有问题。在不同的类中创建常用方法,然后将不同的对象共享给两个不同的线程。不要使常用方法静态同步。
答案 1 :(得分:0)
您可以将synchronized
修饰符添加到多个线程访问的方法中。
e.g。
public synchronized void getNewsItems(Url url){
//some logic here
}
这样,当一个线程正在为一个对象执行一个synchronized方法时,所有其他线程都会调用同一个对象的同步方法阻塞(暂停执行),直到第一个线程完成该对象为止。
你也可以在这里阅读:http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html
更新:
你可以将getNewsItems(Url url)
放在一个单独的类中:
public class NewsItems{
getNewsItems(Url url){
//some logic here
}
}
然后在你的线程中实例化它:
public void run(){
NewsItems ni = new NewsItems();
ni.getNewsItems(url);
}
这样,将调用相同的方法,但在不同的类实例中......