2012-04-23 158 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