从另一个类中读取一个线程字段

时间:2013-06-19 22:36:58

标签: java

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

这是我的设置: 流程类:

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(),...),这样就可以安全地读取和写入它们。

感谢您的任何建议。

最佳

2 个答案:

答案 0 :(得分:2)

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

volatile

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

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

  •   

答案 1 :(得分:0)

使用AsyncTask

onProgressUpdate(Progress...)