Rau*_*nak 10 java multithreading android
当用户启动我的Android应用程序时,我会启动2个线程在后台进行一些处理.thread_1在客户端上进行一些计算,而thread_2从服务器获取一些数据.一切正常.没有线程修改UI.我有两个跟进问题.
new Thread(new Runnable(){
@Override
public void run(){
MyClass.someStaticVariable = doSomeCalculations();
}
}).start();
Run Code Online (Sandbox Code Playgroud)
从线程的run()方法检索数据的最佳实践是什么?我目前有一个静态变量,我将相关计算数据/获取数据分配给它.或者是否建议使用Handler类从线程中获取数据?我想如果他们想要更新UI,只使用处理程序.
while(true)
{
if (!thread1.isAlive() && !thread2.isAlive())
{
startActivity(intent)
}
}
Run Code Online (Sandbox Code Playgroud)我需要等到两个线程都完成后再通过Intent从两个线程传递数据.我怎样才能做到这一点?我可以使用上面显示的代码来完成它,但这似乎是错误的.
Jos*_*hua 12
你可以使用未来.在数据可用之前,它将阻止get:http://developer.android.com/reference/java/util/concurrent/Future.html
另一种方法是将CountDownLatch传递给线程,并在退出run方法时调用countDown():http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html
final CountDownLatch latch = new CountDownLatch(2);
new Thread(new Runnable(){
@Override
public void run(){
// Do something
latch.countDown()
}
}).start();
new Thread(new Runnable(){
@Override
public void run(){
// Do something
latch.countDown()
}
}).start();
latch.await()
startActivity(intent)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15988 次 |
| 最近记录: |