2011-07-05 13 views
-2

スレッドがスレッド内で使用できる方法はありますか?スレッドの安全性マナースレッドの使い方ThreadSaftyを使ったスレッド

にそれを使用する方法もしそうなら、私は私がいつか間違った結果を得たスレッド内でこのスレッドを試してみました。ここでは、この_qryCompoents.prepare(_sdisQueryInfo)では、私が呼び出しています機能であるスレッドセーフに

for(int i=0; i<numExpression; i++) 
{ 
    final int _i = i; 
    final SDISQueryInfo _qryInfo = sdisQueryInfo; 
    final SDISQueryComponent _qryComponent = qryCompoents; 
    TCreate[i] = new Thread(new Runnable() 
    { 
     public void run() 
     { 
      _qryComponent.prepare(_qryInfo); 
     } 
    }); 
    TCreate[i].setName(_qryInfo.getQueryTerm(_i)); 
    TCreate[i].start(); 
} 
for(Thread t : TCreate) 
{ 
    t.join(); 
} 

を使用してスレッド内スレッドを把握するためにどのように私を助けてください。この関数は内部にスレッドを持っています。


この質問は申し訳ありません。私はこの質問を削除できませんでした。

+1

@sehe SEO質問のようなサウンド:)) – cnicutar

+0

スレッド内のスレッド.... Inception? –

+0

私はあなたが間違って私が議論したことを理解すると思う...私が言及する機能もスレッドで構成されて..しかし、それは動作していますが、一貫性がありません。ので、私はいつかその関数の内部で結果をスレッドを追加する場合、それが正しいといくつかの時間である..私は糸して上に言及したコードが正常に動作している。ここ –

答えて

2

原則として、他のスレッドからスレッドを開始することに問題はありません。スレッド間には実際の違いはありません(話すために、親スレッドまたは子スレッドはありません)。

の意味はで、「この機能にはスレッドが含まれています...」とはわかりません。

私はあなたが、それは別のスレッドを開始することを意味すると仮定しています。もちろん、内部スレッドが他のスレッドと情報を共有している場合を除いて、大きな違いはありません。そのような場合には、SDISQueryComponent.prepareのマニュアルを参照する必要があります。

私の期待はSDISQueryComponentが、それは明らかに念頭に置いてのスレッドで設計されている(または、それがスレッドを起動しないでしょう)という単純な理由のために、スレッドでOKであるということです。

私はここに考えるだろう最も重要なことは、あなたは物事が遅くなってより多くのスレッドを作成する(オーバーヘッド切り替えると、おそらくロックによるコンテキストに)競合を作成し、ポイントに遭遇するかもしれないということです。その場合

、通常のソリューションは、スレッドプールとワーカーキューを必要とします。しかし、私はSDISQueryComponentがスレッドプールの使用をサポートしているかどうか分かりませんので、手の外にある可能性があります

+0

おかげで...なぜこれが起こっている知りません正しい結果(不一致)が表示されていません。機能コードも追加してください。 –

+0

..あなたの貴重な時間のために –

+0

http://download.oracle.com/javase/tutorial/essential/concurrency/pools.html、http://download.oracle .com/javase/1.5.0/docs/api/java/util/concurrent/ThreadPoolExecutor.html – sehe

関連する問題