2011-02-02 20 views
-1

私はJavaスレッドのコンセプトを読んでいます。私は文章を見ていました。「スレッドになると、ほとんど保証されません」。java threadsの概念

+2

どのようなドキュメントを参照していますか? –

+0

scjp kathy's sierra book – satheesh

+1

少なくとも、追加の文脈を提供することなく、それは完全に偽のようだ。 –

答えて

2

おそらく、2つのスレッドでのステートメントの実行順序が保証されておらず、それに依存できないという事実を説明しようとしています。つまり、あるシステムでは特定の方法で順序が異なる可能性があります。別のハードウェアを持つマシン。同じシステムで保証されていない場合でも、同じシーケンスが複数回実行されます。

1

私は、何らかの方法で明示的に同期させない限り、スレッドがいつ実行を開始して終了するかという点ではほとんど保証されないと考えています。また、複数のスレッドが同じデータを同時に読み書きすると、データの安全性が保証されなくなります。

1

私は自分自身で本を読まず、もっと広い文脈に依存しています。しかし、おそらく、スレッドの安全性と、コードがスレッドセーフであることを保証するために、マルチスレッド環境で特別な手順を講じる必要があります。デッドロック、ライブロック、およびレースハザード(すべてが迷惑になり、このような事態を最初から防ぐためには、後でその影響を処理するよりもはるかに良い方法です。

2つのフィールドxとyを含む典型的な(単純な)例をクラスAで実証することができます。以下の方法は、xとyの両方がインクリメントされて呼び出された場合:

public void inc() { 
    x++; 
    y++; 
} 

今、通常、あなたは、これはアトミック操作であることを前提としていたい、このメソッドを呼び出した結果だけは、xとyの両方が増加されるということです。ただし、マルチスレッド環境では、これを自動的に保証することはできません。 xをインクリメントした後、現在のスレッドが生成され、別のスレッドが入ってきて無効な状態でそのオブジェクトを使用する可能性があり、問題を引き起こす可能性があります。

これは単なる1つの例ですが、他にも多くの種類とカテゴリがあります。簡単に言えば、スレッドセーフな方法は無償で提供されているため、ほとんど保証されておらず、マルチスレッドコードを作成する場合は、これらの問題に対処する方法を学ぶ必要があります。

実践的な本でJavaの並行性をさらに読むことをお勧めします。これはスレッディングの問題を非常によく説明している素晴らしい本です。

+0

偉大な先生...私はwhtがスレッドセーフであることを理解しましたあまりにも.... – satheesh