7

私は Android 用のアプリケーションを作成しており、特定の情報を処理するためにワーカー スレッドを使用しています。私のコードを読んだ後、それがスレッドセーフかどうかわかりません。

私は自分のコードの簡略版を書きましたHandler。メイン スレッドとの通信に使用されるオブジェクトと、明らかにプロセス自体を省略しました。

public class myClass implements Runnable
{
    private String myString;

    @Override
    public void run()
    {
        myString = "Some Value";
    }
}

これは、これに似たものを実行することによって呼び出されます。

myClass class = new myClass();
Thread thread = new Thread(class);
thread.start()

このコードはmyString、関数で変更 (メイン スレッドで宣言) しているため、スレッド セーフではありませんrun()か?

4

2 に答える 2

4

それ自体は、スレッドセーフです。しかし、どのスレッドが値を読み取るmyStringでしょうか? 新しいスレッドに書き込んだ後にメインスレッドから読み取ると、スレッドセーフではありません。

于 2010-09-10T16:23:39.430 に答える
2

いいえ、あなたが提示したように、スレッドセーフです。myString 変数の getter を作成すると、スレッドの問題が発生する可能性があります。その場合、getter/setter メソッドを同期化するか、変数を volatile にすることをお勧めします。これにより、変数の値がすべてのスレッドで同じになることが保証されます。

于 2010-09-10T16:24:29.850 に答える