2012-12-02 65 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(); 
} 

}