如何从另一个线程或进程中提取数据(Android / Java)

时间:2011-10-12 23:08:50

标签: java android

我知道允许进程间通信的概念。我的程序需要启动第二个线程。我知道如何从Java / Android将数据从一个线程传递或“推送”到另一个线程,但我还没有看到很多关于“拉”数据的信息。子线程需要经常在父线程上获取数据。这是怎么做到的?

2 个答案:

答案 0 :(得分:2)

由于线程共享内存,您可以使用线程安全的数据结构。有些人请参阅java.util.concurrent。该软件包中的所有内容都是针对多线程情况而设计的。

在您的情况下,您可能想要使用LinkedBlockingQueue。这样父线程可以将东西放入队列,子线程可以随时抓取它。如果队列为空,它还允许子线程阻塞。

答案 1 :(得分:2)

您可能会混淆线程和数据。线程是代码执行的行,它们可以对某些数据进行操作,但它们本身不是数据,并且它们不包含数据。数据包含在内存中,线程由CPU(或vm或您选择的任何级别)执行。

无论是否在线程中完成,都以相同的方式访问数据。那就是你使用变量或对象字段等。但是对于线程,你需要确保当线程同时访问相同的数据时没有竞争条件。

总而言之,如果你有一个对象有一些由线程执行的方法,你仍然可以以常规的方式从这个对象获取数据,只要你确保只有一个线程同时执行它。