Android,如何通过两个不同的线程访问常用方法?

时间:2012-05-08 09:28:27

标签: android serialization android-asynctask

在我的应用程序中,我有两个线程(我正在使用AsyncTask类)。在我调用自己的doInBackground()方法的每个线程的getNewsItems(Url url)方法中,此方法将连接到服务器并获得响应。在每个帖子的onPostExecute()方法中,我会调用displayData()方法在屏幕上显示结果。

问题是当我运行时,应用程序崩溃了。我认为这是因为这两个线程可以同时访问常用方法,因为当我分离常用方法时,应用程序运行成功。我不知道是不是因为没有使用序列化?

谢谢

2 个答案:

答案 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);
}

这样,将调用相同的方法,但在不同的类实例中......