2012-12-02 67 views
-2

我可能真的很笨,但實質上我有一個緩衝區和一個線程。Java中的線程和緩衝區

我已經做了緩衝區來從用戶那裏得到一堆消息,並且我想創建一個線程來不斷循環以從緩衝區獲取消息。

這聽起來超級簡單,但由於某種原因,它只是不工作。

緩衝區和線程都是普通的Java類(不是主要的);緩衝區和DisplayThread。

我似乎無法理解他們應該如何一起工作。

這是正確的嗎?或者我錯過了什麼?

public class DisplayThread extends Thread{ 

    DisplayThread Thread = new DisplayThread(Buffer); 
    Thread.start(); 
    public void run(){ 
      while(true){ 
      //will do something   

    } 
    } 

} 

我試過在主類中創建一個緩衝區對象,然後將它傳入,但它仍然不起作用。

我錯過了什麼?它一定是如此明顯,但我根本看不到它。

回答

0

你已經有了基本的想法,但我不確定爲什麼你將新的DisplayThread(Buffer)和Thread.start()放在類的主體中。基本上,這些行應該從一個方法中調用。比方說,例如,他們應該從主叫,你會做這樣的事情:

public static void main(String[] args){ 
    Buffer buffer = new Buffer(); 
    DisplayThread displayThread = new DisplayThread(buffer); 
    displayThread.start(); 
} 

在這種情況下,要創建的緩衝區對象,並把它傳遞給DisplayThread。在您的顯示線程,你將創建一個緩衝的實例變量,構造函數來設置它,就像這樣:

public class DisplayThread{ 
    Buffer buffer; 
    public DisplayThread(Buffer buffer){ 
     this.buffer = buffer; 
    } 
} 
+0

這正是我需要的。我明白我出錯的地方,感覺自己像個白癡。我知道這與主要班級有關,但我無法讓這些作品適合,因爲它是。非常感謝! – Kuga

+0

是的,我知道這是一個完全新人的錯誤,我現在是一個聰明的人,再次感謝! – Kuga

0

這裏是我的關於應該如何代碼是基於給定信息的想法。你怎麼看? :

public class DisplayThread extends Thread{ 

private String[] buffer; 
public DisplayThread(String[] buffer) { 
    this.buffer = buffer; 
} 

public void run(){ 
    for(String str:buffer) 
     System.out.println(str); 
} 

public static void main(String args[]) { 
    String[] buffer = {"hello", "world"}; 
    DisplayThread thread = new DisplayThread(buffer); 
    thread.start(); 
} 

}