我在后台使用线程运行计算昂贵的代码。此代码在运行时返回进度。在主线程中我想读取这个值,这样我就可以向用户显示进度
这是我的设置: 流程类:
Public class ProcessThread implements Runnable {
public int progress;
ProcessThread{
}
public void run(){
// Update progress as the processing goes
}
}
还有一个主要课程:
Public class MainClass {
Private ProcessThread myProcessThread;
MainClass{
myProcessThread = new ProcessThread();
(new Thread(myProcessThread)).start();
}
Public void readProcess(){
// Called from anywere in the main thread.
System.out.print("Progress = " + myProcessThread.progress);
}
}
我想知道锁定变量的最佳方法(使用wait(),notify(),...),这样就可以安全地读取和写入它们。
感谢您的任何建议。
最佳
答案 0 :(得分:2)
您无需同步process
变量的读取。你可以做的一件事就是让它volatile
以确保主线程看到变量的最新状态。
在volatile
:
(在所有Java版本中)对volatile变量的读写都有一个全局排序。这意味着访问volatile字段的每个线程将在继续之前读取其当前值,而不是(可能)使用缓存值。 (但是,无法保证常规读写的易失性读写的相对排序,这意味着它通常不是一个有用的线程构造。)
(在Java 5或更高版本中)易失性读写建立了先发生关系,就像获取和释放互斥锁一样。[9]
答案 1 :(得分:0)
使用AsyncTask和
onProgressUpdate(Progress...)