2012-01-17 29 views
0

私はスレッドクラスのサブクラスを持っています。すべての作成されたスレッドは、文字列を解析する必要がありますが、私のクラスはpublic static void main(String[] args)に私は、このようにした文字列の数を知るためにスレッドクラスの入力文字列

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

    (new myThread()).start(); 

だから、アプリの必要性を各スレッドを作成して実行する必要がありますので、キーボード入力から文字列を取得するために設計されていませんスレッドを作成するので、これらの文字列をスレッドクラスに入力することはできません。どのようにこれらの文字列を入力して各スレッドに渡すことができますか?

+0

キーボードから文字列を取得できない理由はわかりません。あなたはもう少しあなたの質問でそれを説明できますか?入力ファイルはどうですか?メインへの議論かもしれない? – Gray

答えて

0

私が正しくあなたの問題を理解している場合、私は知らないが、私はあなたが別のスレッド例えばwhile(true)ループ内Scannerクラスを使用して、ユーザーの入力をリッスンし、ユーザ入力が収集された後に新しいThreadを開始する必要があると仮定します。

Scanner scanner= new Scanner(System.in); 
SimpleDateFormat df = new SimpleDateFormat("mm/dd/yyyy"); 
df.setLenient(false); 

try { 
    while (true) { 

     String input = scanner.next(); 
     new MyThread(input).start(); 
    } 
} 
catch(Exception e) { 
    e.printStackTrace(); 
} 
0

私はまずスレッドをサブクラス化せず、代わりにRunnableを実装することをお勧めしますが、それは本当にあなたの質問には関係しません。あなたのメインでhttp://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html

は何かのような...

次のようになります。私が正しくあなたを理解していれば、あなたが本当にしたいすべてのスレッドのjavadocはほとんど同じことを言って...

public class MyThread extends Thread { 
    private final String word; 
    public MyThread(String word) { 
     this.word = word; 
    } 
    public void run() { 
     // do something with this.word 
    } 
} 

です

String[] splits = input.split(" "); 
for(String split : splits) { 
    (new MyThread(split)).start(); 
} 

スプリットが正しく動作するかどうかわかりません。単語境界のためのあなたの基準は何ですか?また、おそらくここでスレッドを生成するスレッドの数を調整する必要があります。私は、マルチスレッドJavaを使いこなす際に、Java Concurrency in Practiceを読むことを強くお勧めします。

+0

私はWojtek Oのメイン実装のサンプルが好きだと思います。 –

関連する問題