java-se - JAVA中多线程使用线程不安全的容器会出现什么情况?
高洛峰
高洛峰 2017-04-17 17:34:29
0
3
689

比如StringBuilder在多线程中使用会导致线程不安全,这个不安全会产生什么后果,是数据不正确或丢失.?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全員に返信(3)
Peter_Zhu

最初にコードを提供しますので、自分で実行して試してみてください。

リーリー

上記のコードでは、スレッドセーフでない ArrayList がメイン スレッドに追加され、この ArrayList に要素を追加するために 1000 個のスレッドが開かれ、すべてのスレッドが完了した後、この What が 100 個の要素を追加します。 ArrayList のサイズにする必要がありますか? 10万あればいいのでは?

ただし、実際の実行結果は 100000 にならない場合があります。結果は 99946、99955 になる可能性があります... これが、マルチスレッド操作の場合に非スレッドセーフなコレクションが誤った結果をもたらす理由です。

特定のスレッドの安全性については、私が書いたブログを参照してください: http://xxgblog.com/2013/05/16/java-threa...

いいねを押す +0
Peter_Zhu

これによりデータの不整合が生じ、取得されるデータが不正確になる可能性があります。その影響は完全にビジネス ロジックの制御下にあります。

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

たとえば、スレッド A はリストを走査しています

リーリー

走査プロセス中に、スレッド B が来てリストから要素を削除します。その後、スレッド A は走査の終了時に IndexOutOfBoundsException を表示します。これは、実際の要素数が最大 - 1 になったためです。

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