关于java的多线程的成员变量是否线程安全的疑问?
大家讲道理
大家讲道理 2017-04-18 10:49:12
0
14
1518

对于下面的程序:

public class MyThread extends Thread{
    private Object obj;
    ......
}

请问,这个MyThread里面的成员变量,是不是线程安全的?

因为,MyThread继承了Thread,其使用方式为:new MyThread().start();
所以,这就意味着,每次都是new了新对象,那么,他里面的各个成员变量就是这个对象自己拥有的,所以,是安全的。
我这样理解有问题吗?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全員に返信(14)
PHPzhong

スレッドの安全性は、複数のスレッドで使用されるかどうかに関係します

定義したものはprivateですが、他のスレッドで間接的にアクセスする方法がたくさんあるので、マルチスレッドでの利用も可能ですが、コードに同期処理が追加されていないので安全ではありません。

補足

Thread と Runnable の使用に違いはありません:

リーリー

ケースなしの実行例 (見つけるまでに数回実行する必要があります)

リーリー
いいねを押す +0
左手右手慢动作

新しいオブジェクトが作成されるたびに、そのオブジェクト内のマップはオブジェクト自体が所有するため、安全です。

この文は正しいです。ただし、サブスレッドを呼び出すメインスレッドでパブリック メンバー (変数) を宣言し、サブスレッド内でこのパブリック変数を操作するか、このパブリック変数を参照によってサブスレッドに渡します。マップ型自体がスレッドセーフであるかどうかについては、忘れてしまいました (マップがスレッドセーフであるかどうかに関係なく、マップがインターフェイスであることは覚えています)。特定の実装については、Baidu で検索できます。 。 。

マップ自体の実装がスレッドセーフであれば、マルチスレッド内でどのように操作しても問題ありません。 (メインスレッドで宣言して子スレッドに参照渡ししても)

スレッドの安全性に関する具体的な一般科学の知識については、私が以前に書いた記事を読むことができます https://zhuanlan.zhihu.com/p/...

いいねを押す +0
PHPzhong

それは次のようなものです:
あなたはスーツケースにお金を入れて、一人で通りを歩きます。
もちろん安全だと思います。
しかし、一度盗まれてしまえば、安全ではありません。 。 。

スレッド セーフとは、異なるスレッドが同じデータにアクセスすることを意味します。スレッドが 1 つしかない場合、スレッド セーフはありません。または、これを「安全」であると理解することもできます。結局のところ、他のオブジェクトはアクセスできませんが、「スレッドセーフ」ではありません

質問に答えてください:

このマップ オブジェクトはスレッド安全ではありませんか?

はい、スレッドセーフではありません。
ここでの各 Thread オブジェクトには一意で独立した Map オブジェクトがありますが、「スレッド安全機能」がないからです。
まあ、これは私の理解ですが、少し冗長なようです。 。 。 ==

いいねを押す +0
小葫芦

ご招待ありがとうございます!
でのの使用はnew MyThread().start()的情况下是线程安全に限定されます。

いいねを押す +0
迷茫

プライベートとして宣言しても、同期ロックがなければ別のスレッドで変数を読み取ることができ、スレッド安全ではありません。

リーリー
いいねを押す +0
迷茫

読み取りには問題ありませんが、書き込みではスレッドの安全性の問題が発生します。 。 。

1. スレッドセーフなクラスメソッドを使用する

2. スレッドローカルを使用する

いいねを押す +0
PHPzhong

MyThread只是看成一个类(别想它是一个线程类),把obj をこのクラスのメンバーとして考えてください。そうすると、分かりやすくなります。

いいねを押す +0
伊谢尔伦

マルチスレッドの場合

リーリー
いいねを押す +0
PHPzhong

これは主に、特定の公共リソースにアクセスしたかどうかに依存します。この質問には特定の公共リソースへのアクセスが含まれていないため、安全であるか危険であるとは言えません。

いいねを押す +0
洪涛

それは主に、この変数を操作したかどうかに依存し、毎回新しいオブジェクトが生成されると仮定すると、スレッドセーフです。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート