在Java中,我想在Thread(或Runnable)对象中异步下载一些数据,并让Thread将它的数据放入我在主线程中声明的Object中。
我怎么能这样做?
答案 0 :(得分:3)
最好使用FutureTask - 有一个单独的线程将数据放入主线程的对象容易出现同步错误。
答案 1 :(得分:1)
无论哪种方式,您都需要同步“推杆”。或者,如果它是一个集合,请使用其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课程。