2012-01-17 43 views
0

我有一個線程類的子類。每個創建的線程應該解析字符串,但我的課的目的不是要獲得從鍵盤輸入的字符串,因爲在public static void main(String[] args)我應該以這種方式創建和運行每個線程線程類的輸入字符串

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

    (new myThread()).start(); 

所以應用程序需要知道字符串的數量創建線程,所以我不能在Thread類中輸入這些字符串。我如何輸入這些字符串並傳遞給每個線程?

+0

我不明白你爲什麼不能從鍵盤上獲取字符串。你能解釋一下你的問題嗎?輸入文件怎麼樣?也許參數主要? – Gray 2012-01-17 21:05:42

回答

0

我不知道如果我理解正確你的問題,但我認爲你需要單獨的線程使用例如Scanner類內部while(true)循環和用戶輸入被收集後開始新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

我首先鼓勵你不要子類Thread,而是實現Runnable,但是這不是真正關係到你的問題。如果我理解正確的話,你真正想要的是......

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

的Javadoc線程說幾乎同樣的事情:http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html

隨着你的主要會是這樣......

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

我不知道分裂的東西是否能正常工作;你的標準是什麼?另外,你應該可以調節你想在這裏產生的線程數量。我強烈建議您在進入多線程Java時閱讀Java Concurrency in Practice。

+0

我想我喜歡Wojtek O的一個主要樣例實現。 – 2012-01-17 21:08:12

相關問題