0

我正在使用线程在后台运行计算昂贵的代码。此代码在他运行时返回进度。在主线程中,我想读取这个值,以便向用户显示进度

这是我的设置: 一个进程类:

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()、...),以便读写它们是线程安全的。

感谢您的任何建议。

最好的

4

2 回答 2

2

您不需要同步读取process变量。您可以做的一件事是volatile确保主线程看到变量的最新状态。

volatile

  • (在所有 Java 版本中)对 volatile 变量的读取和写入都有全局顺序。这意味着访问 volatile 字段的每个线程都将在继续之前读取其当前值,而不是(可能)使用缓存值。(但是,不能保证 volatile 读写与常规读写的相对顺序,这意味着它通常不是有用的线程构造。)

  • (在 Java 5 或更高版本中)易失性读取和写入建立了先发生关系,就像获取和释放互斥锁一样。[9]

于 2013-06-19T22:42:37.230 回答
0

Use AsyncTask and

onProgressUpdate(Progress...)
于 2013-06-19T22:38:48.810 回答