2012-04-23 89 views
2

我有一个队列在我的多线程服务器中实现为链表。我想从另一个类访问这个队列。两个类都在同一个包中。我试图让这个队列为公共静态并通过getter访问它,但没有成功有人可以告诉我什么是确切的问题。从java中的另一个类访问静态变量

这是我的代码: 队列声明:

public static Queue<Request> q=new ConcurrentLinkedQueue<Request>(); 

public static void setQ(Queue<Request> q) { 
     Connection.q = q; 
    } 

    public static Queue<Request> getQ() { 
     return q; 
    } 

Accesing队列:

Queue<Request> queue=new ConcurrentLinkedQueue<Request>(); 
queue=Connection.getQ(); 

增值的连接线程队列

q.add(r); 
+5

发布您的代码的相关部分请 – scibuff 2012-04-23 11:22:52

+0

还有什么是您遇到的实际问题?解释“没有成功”。它是编译问题还是运行时? – maksimov 2012-04-23 11:24:01

+1

请注意在多线程程序上使用非线程安全队列。如果你还没有看过[BlockingQueue](http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue.html),它可能会对你有所帮助。 – amit 2012-04-23 11:26:01

回答

10

您可以访问public static直接使用012表示另一个类的成员:

public class Foo { 
    public static String bar = "hi there"; 
} 

public class Thing { 
    public static void main(String[] args) { 
     System.out.println(Foo.bar); // "hi there" 
    } 
} 

public static数据成员通常都不是一个好主意(除非他们已经final),但是如果你需要一个,这就是你如何做到这一点。

0

您应该能够访问,如果直接,或使用静态getter方法...

如果这是你的Queue类...

public class Queue { 
    public static LinkedList myList = new LinkedList(); 

    public static ListedList getMyList(){ 
     return myList; 
    } 
} 

然后,你可以访问你的清单是要么调用Queue.myListQueue.getMyList() - 两者都会做同样的事情。使用getter方法的好处在于,您可以控制对列表的访问权限,例如通过使方法​​防止对列表的调用失常。

+0

我试了这两件事。但是我正在排队。以下是我的代码片段。在服务器类中,我创建连接类对象并在新线程中创建新连接。在连接我宣布队列为: – Anup 2012-04-25 05:21:28

+0

你能否请你的代码粘贴到你的问题,以便可以正确格式。 – wattostudios 2012-04-25 05:28:39

+0

队列声明:public static Queue q = new ConcurrentLinkedQueue (); public static void setQ(Queue q){ \t \t Connection.q = q; } public static Queue getQ(){ \t \t return q; \t} – Anup 2012-04-26 05:46:34