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変数の読み取りを同期する必要はありません。できることの 1 つはvolatile、メイン スレッドが変数の最新の状態を確認できるようにすることです。

オンvolatile:

  • (Java のすべてのバージョンで) volatile 変数への読み取りと書き込みにはグローバルな順序があります。これは、揮発性フィールドにアクセスするすべてのスレッドが、(潜在的に) キャッシュされた値を使用する代わりに、続行する前に現在の値を読み取ることを意味します。(ただし、通常の読み取りと書き込みを伴う揮発性の読み取りと書き込みの相対的な順序については保証されていません。つまり、一般的に、これは有用なスレッド構造ではありません。)

  • (Java 5 以降) 揮発性の読み取りと書き込みは、ミューテックスの取得と解放と同様に、事前発生の関係を確立します[9]。

于 2013-06-19T22:42:37.230 に答える
0

AsyncTaskを使用し、

onProgressUpdate(Progress...)
于 2013-06-19T22:38:48.810 に答える