繁体   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