簡體   English   中英

用作垃圾回收的同步鎖的對象數組

[英]Array of Objects to be used as Synchronization locks being garbage collected

希望我只是犯了一個新手錯誤,有人可以指出正確的方向,但是這里有:

我需要創建一個集合或數組,某種有組織的對象組(或任何其他有效的對象),以用作呈現方法的同步鎖。 我一直將Object []存儲為字段,而且似乎不喜歡存儲數據。 奇怪的是,當我將鎖定對象設置為類中的字段時,我沒有問題,但是,如果我嘗試使用如下所示的數組,則它們在鎖定檢查時將返回null。

首先,我初始化鎖數組:

for(int i=0; i<limit*limit; i++) {
    vertexbufferlocks[i]=new Object();}

然后我調用渲染函數:

for(int buf=0; buf<limit*limit; buf++){
    synchronized(bmem.vertexbufferlocks[buf]){
        bindbuffer(vbids[buf]);
        GL11.glDrawArrays(GL11.GL_QUADS, 0, drawlengths[buf]);
}}

引發: NullPointerException on bmem.vertexbufferlocks[buf] synchronized(bmem.vertexbufferlocks[buf]){synchronized(bmem.vertexbufferlocks[buf]){ NullPointerException on bmem.vertexbufferlocks[buf]上出現NullPointerException on bmem.vertexbufferlocks[buf] synchronized(bmem.vertexbufferlocks[buf]){我一定先運行構造函數循環。 我也嘗試使用LinkedList,List和HashMap,同樣的問題。 我在使用此特定類型時僅遇到問題,我還有其他用於數據的同步類,它們在同一時間初始化和讀取,這些不受影響。

新細節:

模型對我來說很好用,但是由於我在修改任何其他數據時無法渲染任何數據,因此所有調用都位於與以前相同的位置,因此造成很小的視覺干擾:

在里面:

    vertexbufferlock=new Object();

整個程序初始化后不久:

for(int buf=0; buf<limit*limit; buf++){
    synchronized(bmem.vertexbufferlock){
        bindbuffer(vbids[buf]);
        GL11.glDrawArrays(GL11.GL_QUADS, 0, drawlengths[buf]);
}}

我認為這里要解決的關鍵問題是,一旦循環結束,我的對象可能正在從數組中垃圾回收。

原來這是一個新手錯誤,在初始化鎖數組之前我沒有聲明我的limit字段,但是我以前在聲明我的單個鎖的時候沒有使用chunklimit(一個對象不需要它)。 因為我的初始化功能非常大,所以它對我有所影響。 謝謝您的回應! 感謝約翰·溫特(John Vint)再次檢查我的限額的動機。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM