2011-08-28 26 views
9

私は現在、多量のネットワーク処理とデータベースストレージを必要とするJavaでマルチスレッドシステムを設計する方法を考えています。プログラムは最初に3つの基本スレッドを起動します。これらの基本スレッドに沿って、私はメインプログラムからではなく、2つのスレッドから他のスレッドを起動したいと思います。誰かが参照を持つ理論的なソリューションを提供することができない場合はJavaのスレッド内のスレッド?

> Parent ->t0 thread1 -> t1 tread1.1 
>  ->t0 thread2 
>  ->t0 thread3 -> t2 thread3.1 

t0= inital time 
t1,t2 = time at a point in the running thread 
t1 != t2 

:スレッドのような階層のいくつかの並べ替えにつながる別のスレッドを起動することは可能ですか?

+1

Erm、はい。なぜあなたはできないでしょうか?たぶんあなたがそれを試した場合... –

+0

私はあなたが何を求めているのか分かりません。実行中のスレッドにかかわらず、任意のJavaコードから新しいスレッドを作成できます。スレッドは、生成する他のスレッドへの参照を保持する必要がありますか?あなたが記述する階層の目的は何ですか? – Russell

答えて

8

はい、できるだけ多くのスレッドを起動できますが、それはおそらく最善の方法ではありません。ノンブロッキングAPIを使用すると、外部呼び出しの実行を開始できるようになり、呼び出し元のスレッドはソケット/データベース呼び出しを待つことなく直ちに何かをやり直すことができます。次に、ソケット/データベース呼び出しが戻ってくると、その処理を終了するためのコールバックがトリガーされます。

ノンブロッキングI/Oは、呼び出しを開始し、コールバックを登録するだけで、ほとんどの場合ただちにスリープしている「正しい」数の同時スレッドのバランスをとる必要がないため、CPU使用率が大幅に向上します。

http://www.owlmountain.com/tutorials/NonBlockingIo.htm

http://www.tensegrity.hellblazer.com/2008/03/non-blocking-jdbc-non-blocking-servlet-apis-and-other-high-mysteries.html

+0

例外に関係なくスレッドをどのように実行させ続けることができるのか分かりますか?例外はスレッドを止めているように見える(Im Iming)。スレッド内でスレッドを作成して解決しようとしましたが、スレッドB(スレッドA内から作成)の例外は両方のスレッドを停止します。両方のブーリアンフラグは、停止した後も真です。 – Lealo

2

はいスレッドのrun()方法で...およびオン

をスレッドが別のスレッドを起動することができ、そのスレッドは、スレッド(複数可)を起動することができ - あなたが他のスレッドを作成して開始することができます。

3

質問に答えるために、イエスのスレッドが他のスレッドを起動することができます。

階層は重要ですか?

ExecutorServiceをキャッシュされたスレッドプールで使用する方がよいでしょう。そうすれば、ロットを作る代わりにスレッドをプールすることができます(これは高価です)。 ExecutorServicesは他のクールなものも提供しており、Callable/Runnablesを使ってテストするのはおそらく、あなた自身でスレッドを使っているよりもはるかに簡単です。

0

それはexempleため ことが可能ですあなたは、配列のタブにsubMainThreadにここ

exemple

while(tab[1].isAlive()) { 
    //do somthing.. 
    System.out.println("Ligne affichée par le main"); 
    try { 
    // et faire une pause 
    tab[1].sleep(800); 
    } 
    catch (InterruptedException ex) {} 
} 

を与えることができた後、糸をクリートし、この

UnThread[] tab= new UnThread[10] ; 

for (int i=0;i<20;i++) 

tab[i] = new UnThread(); 

のような配列内のIDを置くことができます単純なスレッドの使用: http://kamel.berrayah.com/wordpress/2013/07/java-threads/