Java线程,访问主代码中的对象

时间:2010-04-23 12:34:10

标签: java multithreading

在Java中,我想在Thread(或Runnable)对象中异步下载一些数据,并让Thread将它的数据放入我在主线程中声明的Object中。

我怎么能这样做?

5 个答案:

答案 0 :(得分:3)

最好使用FutureTask - 有一个单独的线程将数据放入主线程的对象容易出现同步错误。

答案 1 :(得分:1)

  1. 将该对象(集合?)传递给每个线程(首选)
  2. 将其声明为静态成员并静态访问它。
  3. 无论哪种方式,您都需要同步“推杆”。或者,如果它是一个集合,请使用其java.util.concurrent等效项(如果存在)

    如果您不想对下载进行并行化,只需在另一个帖子中启动它,您可能需要Callable而不是Runnable

答案 2 :(得分:0)

您可以将Object传递给下载线程的构造函数。只要确保它是线程安全的......

答案 3 :(得分:0)

您需要将对象传递给Thread的构造函数并将其分配给字段。当然,这会导致同步问题,因为两个线程都会“触及”该对象,因此您需要使用适当的保护方案。

答案 4 :(得分:0)

这取决于您的同步需求。您是否需要从两个线程修改对象,还是只从主线程读取?无论如何,最简单的方法是使用synchronized代码:

主线程:

public setObject(Object obj) {
  synchronized(this) {
        this.obj = obj;
    }
}

从第二个线程调用上面的方法。您也可以使用LockObjects

还要查看Exchanger课程。